一位牛人讨论关于怎么样成为一名优秀的程序员

3 views
Skip to first unread message

CityPW

unread,
Apr 23, 2007, 11:31:13 PM4/23/07
to CityPW-Java技术学习小组
一位牛人讨论关于怎么样成为一名优秀的程序员
I get emails from people who want suggestions on how to become a
programmer, so it might be a good time to write a few notes on it.

EDIT: Programming as a career, not learning to program by itself. This
is all based on the folks I've helped through the years and talking
with other programmers on how they got into this as a career. Learning
programming itself is a completely different topic.

1. Get An Education

Get a degree in computer science or the equivalent. It doesn't matter
whether it's a four year, two year or technical school. The whole
point is that no one will hire you without experience unless you have
a degree. Don't expect to learn everything you need to know, however.
The point of the degree is to get you your first job. Most of what you
need to know you will learn later anyway.

In the 80's I had no degree in computer science and got my first job
because they were desperate and I had some graduate experience (in
Chemistry). Today it's different where getting your first job
virtually requires a degree.

My sister got a two year associate CS degree, went to work at IBM and
is now a VP (in charge of fostering CS educations no less).

2. Can't Get The Education? Back Door It

Work in QA (Quality Assurance). Assuming you find a good quality QA
department (which isn't treated like a third-world stepchild) in a
company with a lot of software development, you have a great
opportunity to be exposed to software, interact with programmers, and
hopefully absorb some education. It may take time, and you might have
to switch jobs but eventually opportunities will show up; it's always
easier to build programmers from within than hire from outside. Once
you have a real programming job then you're no different than the
"educated" folks.

3. Pick A Language and Learn It

If you've never programmed before, where do you start? Lots of people
will suggest things here (usually their favorite language). So many to
choose from, it's hard to pick just one.

Languages come in many flavors, here's a hacked up attempt to
categorize them:

1. Traditional Procedural Languages (C, Fortran, Visual Basic,
etc.)
2. Object-Oriented Procedural Languages (C++, Java, C#, Smalltalk,
Ruby, etc.)
3. Functional Languages (Haskell, Erlang, Clean, Lisp, Scheme,
etc.)

Most jobs today fall into category #2. Speaking of jobs:

1. Microsoft .Net World (C++,C#,Visual Basic)
2. Java World (Java)
3. PHP
4. Everything Else

These are the divisions in the world regarding the platform, which is
the programming language, frameworks, tools, environments and
philosophy that binds it all together. Most jobs are in the first
three.

So what to learn? It might depend on where you live, not every
location has enough opportunities to provide prospective jobs. If you
live in a high tech area (Boston, New York, Bay Area, etc) you can go
with a less popular, but more learnable and advanced platform.

My suggestion here is learn Ruby. Fewer jobs but most are smaller
companies more likely to hire less established programmers than
Behemoth Inc. Another choice but with more jobs might be PHP, it's
easy to learn but in the hands of less experienced programmers you can
learn a lot of bad habits. Learning Ruby will make it easier to learn
Java or C++ than if you start with PHP.

Another suggestion would be to learn Javascript; combined with
learning Web Design (ie. HTML, CSS), there are lots of new
opportunities these days doing Ajax in the browser where you can focus
on just the client side. It might even help you get into jobs even if
you lack other programming skills (see #2).

Of course you could learn something from the functional languages but
be advised that the number of jobs is far more limited, and you will
not be able (or want to) switch to the more common procedural
languages like Java or C++.

The largest companies are more likely to use Microsoft or Java than
anything else (although PHP is pretty high up there too). Learning
these platforms takes a whole lot more time; it's not just the
language but all the associated frameworks, tools, environments and
servers that will tax your brain. With Java you have more choices for
tools (free!) and frameworks (also free!).

Programming can also be split into areas (along with the more common
language choices):

1. Web Programming (PHP, Perl, Python, C#, Java, Ruby, etc.)
2. Desktop Application Programming (C++)
3. Server Programming (C++)
4. Database (SQL)
5. Communications and Network Programming (C++, Java, Erlang,
Haskell)
6. Scientific Computing (Fortran, C++, LISP)

4. Write Code

The only real way to learn to program is to program. Period. You can
read books and tutorials, attend seminars, even get a degree; but
unless you write code you will never be an effective programmer. Lots
of code. Broken code (learn to debug). Most programmers start young,
have lots of time to code, and learn useful lessons early just by
doing. Don't just write little snippets (like many college courses
make you) write useful stuff, web applications, calendars, widgets,
basically anything that someone (even you) can actually use. I started
off writing little apps for a food coop, and a newsletter writing
application. Writing a sort routine will not teach you that much.
Having someone depend on something you wrote (even minimally) teaches
you a whole lot about debugging, and design, and users, and feature
requests, all useful things to know.

5. Read

Like I have said before, I read blogs, programming news sites,
basically anything I can find to keep up with what's going on,
changing or sucks in the world of programming; even stuff I don't use.
It opens your mind to other approaches and other ways of solving
problems. Don't for a moment ever think you know enough and can stop
learning. That's when the technology steamroller runs you over and
leaves you behind.

6. Hang Out With Other Programmers

You can learn a lot from other programmers, both good and bad (and
good and bad things!). I've always been willing to mentor other
beginning programmers or answer questions on how to do something. Not
everyone does, but you can tell. Pick their brains.

If after all this, you find you don't enjoy programming, it's too
difficult, you want to toss your computer out the window, then find
another line of work.

Or like the rest of us, come back tomorrow and try again.

Reply all
Reply to author
Forward
0 new messages