How do I become a Code Ninja or Rockstar?
I am a CS major but somehow I feel my programming skills are not great as to match to that of a code Ninja or Rockstar.
I have read most of the algorithms books, Data structures book but somehow I feel I am still falling short of being a good programmer.
I have the following books in mind to complete: a) Programming Pearls b) Programming Challenges.
I am not sure which one should I pick. I have been in industry for past 3 years and know coding languages like Java, C and Python but I haven't had the courage to take part in Google code jam. This is I did and due to my silly mistake I uploaded the wrong output to the code. I was able to solve two easy and 1 hard problems.
In short I wan't to code with ease so that I can crack any coding problems in MS, Google, LinkedIn, Facebook etc.
Don't consider this post as a way to crack the interviews of these companies. I just want to be a Code Ninja.
Thanks!
Looking for your suggestions and pointers.
18 comments
[ 2.8 ms ] story [ 53.7 ms ] threadAnd don't use the terms "code ninja" or "rockstar" to describe engineers. Those terms are self aggrandizing crap that inadequate engineers use to stroke their own egos. At best using those terms marks you as being naive.
I throw up in my mouth a little bit every time I hear "Code Ninja" or "Rockstar". Whoever coined those terms should be forced to patch legacy cobol code for all eternity.
To better answer your question, you become great through practice and application of skill. All the reading of material in the world won't act as a fill-in for doing.
So do.
Write a webapp. It doesn't have to be a "startup", it doesn't have to be great, you don't need 5000 users and a techcrunch article about it. You just need to pick a point on the horizon and code towards it. And when you reach that point you pick another, and so on. Forever. In 30 years you will be halfway to greatness.
In other words, get to work noob.
Also, most people who call themselves ninjas are full of shit.
Javascript programmers are Ninjas
CSS experts are Wizards
PHP Developers are Rockstars
I think you are looking to be more of a Java or C Guru, Perl Hacker, or Python Developer.
Not sure why Python experts don't get a "cool" name, that just seems to be the way it is.
2) Remember to work on projects that are something more than algorithmic puzzles. Algorithmic puzzles are fun, great and are brain gymnastics, but you should also learn how to write low-level socket code (Richard Steven's "UNIX Network Programming" books are excellent in that respect), deal with concurrency (switching languages again, Java Concurrency in Practice is a great introduction).
3) Participate in open source projects. Dan Kegel has an excellent guide on how to contribute:
http://kegel.com/academy/opensource.html
Even if your contribution to an open source project is small, it will require reading and understanding a great deal of non-trivial code.
Finally, as moonpolysoft said, don't call yourself a ninja or a rockstar.
Constantly test yourself and keep reaching.
First, aspire to be a great engineer. Ninjas are for turtles and Rockstar is caffeinated sugar water.
Second, design and implement software. Write programs in areas that interest you. Then iterate and design something that your friends or family can use.
Finally, do your best and forget the rest. And continually get better doing it.
(It wouldn't hurt to read "Programming Pearls".)
Still I think my question remains un answered. May be I should re-phrase it as "How should I become a good programmer able to crack problems easily"?
What books did most of you used to aspire to be a good programmer?
Thanks again!
Step 2) call yourself a ninja
My recommendation is to build a bunch of interesting things that are at a higher level than one-off, design-free algorithm puzzles (well, those sorts of things aren't exactly 'design free' but they typically don't make you think about lots of tradeoffs - you find a plausible way to do something and do it).
I suspect that for most people this means finding an employer who solves interesting problems and getting an job there that actually involves participation in the 'good parts', so that you actually do it. My record of self-motivating after my degrees were done is pretty much zero - best to make this your day job.
The other part of the "doing" side of things is finding something to do. A good place to start is by solving a problem you have yourself or that you are interested in. Maybe you think all the todo list managers suck, or maybe you want a tool that helps to organize your porn collection. Great, pick a language and get to work.
Another secret is to hang out with smart people and other good programmers. Talk to others about their work and learn from them. The rising tide raises all ships.
It's kind of a hard thing to evaluate, I suppose. I would say that to 'become great' - you can't just sit around programming all day (although this will no doubt help). It's a kind of 'knack' for working problems out, finding new techniques, using tools in new ways etc. These are all the things that make 'great' programmers great imho, and none of them are actually directly related to programming. In my experience, people who are REALLY good at solving programming problems are REALLY good at it outside of the programming discipline too.
There is a huge difference between knowing and KNOWING. Knowing your tools well enough lets you focus on the problem rather than searching how to hacking your way through. Don't be a copy paste programmer.
Don't be mislead by fast typers either.
Fast turnaround is good, but stable code is better. What's the point of finishing in 1 day instead of 2 if you'll be debugging for a week afterwards? With enough practice you'll be able to get the stable code out in the same time as the fast typer.
Some book recommendations:
-Code Complete 2.
-Refactoring: Improving the Design of Existing Code.
-Clean Code.
-Head first design patterns.