

How do I become a Code Ninja or Rockstar?  - lipaktest

Hello friends,<p>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.<p>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.<p>I have the following books in mind to complete:
a) Programming Pearls
b) Programming Challenges.<p>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.<p>In short I wan't to code with ease so that I can crack any coding problems in MS, Google, LinkedIn, Facebook etc.<p>Don't consider this post as a way to crack the interviews of these companies. I just want to be a Code Ninja.<p>Thanks!<p>Looking for your suggestions and pointers.
======
angrycoder
Spend less time worring about how to be a ninja or doing puzzle books and
spend more time coding real projects.

In other words, get to work noob.

Also, most people who call themselves ninjas are full of shit.

------
brk
Gack.

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.

------
strlen
1) Learn some languages that force you to think differently, even if they
aren't of an immediate use in the industry. I'd suggest starting with Scheme
(Little Schemer + SICP) and then learning an ML family language (Haskell or
OCaml). A language that incorporates elements of logic programming (Erlang or
Prolog) would be useful too. You may not be lucky enough to use these
languages in your day-to-day work, but there are lessons you can take home
with you e.g., minimizing mutable state.

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.

------
dstein
Step 1) copy & paste a JQuery snippet that you don't understand

Step 2) call yourself a ninja

------
nezumi
Why do you want to be good at programming? You'll only get there if you are
driven by your intrinsic interest in the problems you are trying to solve.
Becoming a 'rock star' is a side effect, not an end goal. The way you've
phrased your question suggests you don't truly have that intrinsic interest in
problem solving or building. Ask yourself what your true motivation is and
carefully consider whether sitting at a desk coding is really what you want to
do every day.

------
powatom
I would say that a truly great programmer isn't necessarily technically
amazing. For example, a vast knowledge of programming languages is something
that anyone can learn with enough time and patience. However, it's the ability
to problem solve: to look at what exists already and make something new out of
it, that really makes a developer 'great'. It doesn't really matter if they
know a language inside out when tackling a project - it's the ability to help
themselves: use the language and any tools available / relevant to solve a
problem in an innovative way.

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.

------
lipaktest
Thanks guys for your comments. I didn't know Code Ninja and Rockstars were not
liked by the developers community per say. I would refrain from using those
terms.

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!

~~~
bendmorris
It's not about books; no book is going to make you a better programmer
automatically any more than a book on running will make you a runner. Start
programming at whatever skill level you're at, start some independent
projects, get a part time job...when you hit your wall, then find a good book.
You're going to get a lot more out of doing than reading.

------
d2fn
You get to be a good developer by repeatedly building software that solves
problems and creates utility. Heed the advice of others who suggest learning
different classes of languages that affect the way you think about problem
solving. But pick something and don't toil over it too long.

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.

------
onan_barbarian
These are dumb expressions ("Code Ninja", "Rockstar") but the intent is fine.

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.

------
checoivan
Practice often... and know your language well.

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.

------
jamesbritt
"Skill to do comes of doing"

    
    
       -- Ralph Waldo Emerson 
    
    

Also, as others have said, please do not aspire to "rock star" or "ninja."

Constantly test yourself and keep reaching.

------
akadien
Hey, you're not Steve Jobs, are you?

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".)

------
seasoup
I see the problem,

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.

------
bretthellman
According to Malcolm Gladwell, which I agree with, it's practice and
persistence. How many hours are you coding a day? How many hours are you
spending learning to code smarter?

------
moonpolysoft
If you want to get better, build more things.

And 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.

