Click here to Skip to main content
12,815,616 members (41,545 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as

Stats

7.6K views
5 bookmarked
Posted 26 Feb 2013

Super Developer: The Art of the Start

, 26 Feb 2013 CPOL
Rate this:
Please Sign up or sign in to vote.
What to learn? What is the best profile of a developer? How to improve developing skills?

What to learn? What is the best profile of a developer? How to improve developing skills? Those are the principal questions that every passionate developer asks.

I interviewed a lot of new fresh developers for recruitment or for training; I read many CVs and what I can say about all of them is that every single one of them is counting the number of frameworks he knows.

“Well, I know .NET, I know JEE, I know Symfony and I’m really good with Python Django.”

Mmm OK! But can you tell me why we use interfaces in OOP, why we use getters and setters, what the difference between a static method and a non-static method and how the memory handles them, what are the four principals of OOP. Do you know what a floating point is? What do you know about parallel programming and monitors?

Those are generally my questions, and sadly only few developers were able to answer them and the reason behind it is because they didn't correctly answer the above questions. Because you see, I don’t really care about how many frameworks you know, I don’t care about how many .NET certificates you have because the real question is do you know how to code.

After all, frameworks are a collection of ready-to-use code, you just Google them and you will find the suitable class to use, but if don’t know how to code, you will never know what to look for and you will still writing crap code even if you know all the available classes.

So what to learn? Personally, I suggest starting with the C language, have fun programming, look for complex problems (like the 8 queen problem, sorting...) and enjoy yourself solving them, feel the power of algorithms, feel the greatness of creation. No UI, no buttons, just you and the console displaying green text (nice effect). Why is the C language important? Well, first of all, developers must master data structures and coding (can actually write a good if statement and loops). Second, the C language is arguably a low level programming language so developers will deal with low level details like memory management (pointers) and also some other stuff like floating points numbers (check this tutorial here), fixing point numbers (check this article here), processor cache and memory, and many other low level issues that help developers understand computers and create better optimized code in future. Also I suggest writing a TCP/UDP C based application to deal with low level sockets and network layers. So stop dragging and dropping UI, stop that Android/Windows phone application that you are doing and go develop some real sh*ts.

After playing with C language, go and learn some oriented object language (I recommend Java) and please instead of Googling every single library, try to understand the basics of OOP, learn what actually is a static method, why we have public, private and protected keywords, learn why we are using getters and setters, try to feel the real power of encapsulation, write basic programs that show the value of OOP. After developing some of your own projects and after making all kind of mistakes, start reading other people’s code, fall in love with design patterns and SOLID principals, learn them and try to applies them every single time you write a piece of OOP code.

Now you have a nice understanding of OOP, you can change the air by learning concurrency and parallel programming. Study what a mutex is doing, what is a monitor… Implement some fun problems like the traffic problem. Concurrency is fun but hard so learn it. At the same time, try to learn about compilation process, learn about state transition diagrams and grammars… And if you have time and effort, try to understand operating systems and how they work by implementing one (of course, with minimum functionality, it can be just a console that displays information about hardware), have a look at SOS (simple operating system) here.

I know that was some hard concept and needs a lot of time and efforts to master. But hey, you are the one who wants to be the super developer, so work for it.

My final thought will be a developer that really understands programming and has a great ability to learn is much better than a developer that knows all the framework classes, knows how to use them, but writes sh***y code.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Njim Mahdi
Chief Technology Officer Flexwork
Germany Germany
I'm a developer, software architect and a I have my own start up, I' worked with different technologies(.Net , java j2ee, Python , Python django, PHP, PHP symfony...). Our company is working on the distributed systems and cloud solution(IAAS tools, SAAS architecture and software) I like to read about technologies and I like also to blog and write articles.

You may also be interested in...

Pro
Pro

Comments and Discussions

 
QuestionImportant topic! Pin
Houssem_Dellai11-Oct-13 4:39
memberHoussem_Dellai11-Oct-13 4:39 
QuestionNice Article Pin
P.Venkatachalam4-Mar-13 23:23
memberP.Venkatachalam4-Mar-13 23:23 
AnswerRe: Nice Article Pin
Njim Mahdi5-Mar-13 2:48
memberNjim Mahdi5-Mar-13 2:48 
GeneralGreat article Pin
skible26-Feb-13 8:07
memberskible26-Feb-13 8:07 
GeneralMy vote of 5 Pin
Paulo Roberto Elias26-Feb-13 6:03
memberPaulo Roberto Elias26-Feb-13 6:03 
GeneralRe: My vote of 5 Pin
Njim Mahdi5-Mar-13 2:48
memberNjim Mahdi5-Mar-13 2:48 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.170308.1 | Last Updated 26 Feb 2013
Article Copyright 2013 by Njim Mahdi
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid