[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[OT] A question for programmers - Inspiration



I always thought of a fairly sizeable project that I'd like to tackle, and
dove into it with the new language I wanted to learn.  Something like a full
blown editor, an interpreter, a big scientific Monte Carlo calculation, an
Emacs extension, or a database.  A big project will ensure you encounter
numerous stumbling blocks that really make you think about how to accomplish
things in the language you are using.  You'd never think of such things if you
just sat down and thought, what meaningful thing can I learn about this
language today?

Also, you should try to understand what the *best* way to accomplish each task
*in* *that* *language* is.  It's more important to understand how the language
shapes the solution to the problem than it is just getting some solution to
work.  Anybody can hack a solution in new language B that looks just like the
solution they wrote in old familiar language A - you've only mastered language
B when you understand the idioms of that language.  For example, when learning
A+, a vector and matrix oriented language, I initially wrote many C style
loops, because in C that's how you apply a simple operation to a sequence of
values.  I eventually learned to use all the vector operators to replace the
iterations, and knew I was getting it down when I started to think in terms of
vector and matrix operations rather than iterating over scalars.

I've successfully applied this approach to learning FORTRAN, C, A+ (I maintain
the Debian package), C++, Scheme, Emacs lisp, and now Perl.  Some of those
sizeable projects have never been finished, but significant portions have been
done several times over in multiple languages!

You phrased your question in terms of languages, but when I interview people
for programming positions, I generally do *not* ask very many language
specific questions, I ask questions that explore more abstract thinking and
logic.  I think a guru is someone who knows the language independent
abstractions of computer science as well as being an expert in multiple
languages.  So learn those, too.  Read about algorithms, data structures,
design, and compiler construction.  Learn how to break a problem down into its
fundamental components.  This is a key differentiator - the novice sees a big,
complicated problem and writes a big, complicated program; the guru sees a set
of smaller problems for which he writes a set of simple, elegant modules that
can be independently tested and then applied together to solve the larger
problem.

That was fun, thanks for asking :-)

On Mar 20, deFreese, Barry (Barry.deFreese@nike.com) wrote:
 > OK, so this is going to be somewhat of an esoteric question but..  How did
 > you really delve into development and what is/are your sources of
 > inspiration.  I am trying to dive head first into Python/Perl?/C/C++ and
 > while it's easy enough to write the "Hello Worlds" and CD-catalog programs
 > :-) how did you move beyond that.
 > 
 > For example.  I see a lot of questions on debian-user about configuring IP
 > addresses, so I thought, hey I'll write a quick Python app to configure
 > /etc/interfaces and /etc/resolv.conf.  Of course doing an apt search
 > produces etherconf, linuxconf, and several other utilities for configuring
 > interfaces.  Would you write the app anyway just for the experience??  How
 > did you get from the middle ground to guru-dom??  Or is the answer that if I
 > need to ask, I will never be a hacker!!??  :-)
 > 
 > Thanks!! 
 > 
 > Barry deFreese
 > Technology Services Manager
 > Nike Team Sports
 > (949)-616-4005
 > Barry.deFreese@nike.com
 > 
 > "Technology doesn't make you less stupid; it just makes you stupid faster."
 > Jerry Gregoire - Former CIO at Dell
 > 
 > 
 > 
 > 
 > -- 
 > To UNSUBSCRIBE, email to debian-mentors-request@lists.debian.org
 > with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

-- 
Neil L. Roeth



Reply to: