I need your advice! Last summer I took an introductory programming
course and learned a little bit of Scheme, even tho I didn't like it
too much...
HOwever, I realized that I want to be better at this stuff and learn
more about programming. It's fascinating. I talked to some of my
friedns and told them that I want to be a better programmer. I'm
thinking of learning a new programming language, but I do not know
which. Basically, I do not particularly care about the details, such
as if a language is windows-only. What I do care about is learning
something new.
So, one of my friends tells me that I should learn C++, because "it's
the best". But, seriously, he doesn't know anything but C++, so I'm
not too sure if he is qualified to give this type of advice...
Another friend tells me "define what you mean by 'better programmer'".
So, that guy wasn't too helpful either. So I thought about this A LOT,
and I'm wonderingif I could ask for advice on the internet.
Thanks in advance for your time...
Read this book:
Code Complete
http://www.construx.com/stevemcc/cc.htm
Scott wrote:
I believe that a programming language is just a tool -- like the paint brush is
in the hand of the artist, or the guitar in the hand of the master. I think you
should find out why you want to be a programmer -- what do you want to make? I
learnt using Pascal, because that was the language we used in computer science,
learnt C++ to design an object orientated multimedia program (which is now
becoming embedded), and now program also in VB (there is plenty of money there)
and Java. The language is only the tool -- being a good engineer is about
recognising the best tool for the job and using that -- the real power is in
your logic in the algorithms you design or implement. C++ is my favourite
language because I have the full power of accessing the underlying machine that
I am programming for. It is a bit easier from when I started now that there is
a standard library, but you have a flexibility and power with C++ that you don't
get with other languages (my opinion -- maybe biased?). Once you get C++
happening Java is a snack. Additionally, you can get a C++ compiler for free
(GNU) to do some experimenting.
Make projects for yourself -- i.e. problems -- that you can write code to solve
them. You learn the language this way (it is a bit like children playing --
they are actually building their muscles and learning coordination while having fun)
Good luck
--
Angelo Fraietta
PO Box 859
Hamilton NSW 2303
Home Page
http://www.users.bigpond.com/angelo_f/
There are those who seek knowledge for the sake of knowledge - that is CURIOSITY
There are those who seek knowledge to be known by others - that is VANITY
There are those who seek knowledge in order to serve - that is LOVE
Bernard of Clairvaux (1090 - 1153)
Excellent advice! Non-language-specific, clear, funny... My all time
favorite!
Well my $0.02 is that to be a better programmer you need to get the
tools you need to program better in your toolbox(aka brain). The 2
big tools are:
1: the ability to manage complexity and keep track of the details that
you can not manage out of existance.
2: the ability to analize a problem and translate the solution to
something that a very stupid device(computer) can execute correctly.
To do this you need much more then knoledge of a given language. If
you look at CS education you do not get taught how to code, you are
expected to figure it out on your own. The hard stuff is what they
cover in class.
Here is an online book you might want to look at:
http://www.htdp.org/
and you can get the enviorment for the book at:
When you are starting out you should not spend a lot of time learning
a language but learning the tools that you need to implement your
solution in what ever language you are using.
good luck
marc
The guy must be joking. HTML is the king. Learn it first.
Good choice for a start. Maybe in time it'll even grow on you...
> HOwever, I realized that I want to be better at this stuff and learn
> more about programming. It's fascinating. I talked to some of my
> friedns and told them that I want to be a better programmer. I'm
> thinking of learning a new programming language, but I do not know
> which.
Being a programmer isn't about learning new languages. It's about
learning the ideas in computer science. I remember when one of my profs
said, "Have you ever missed having closures (aka lambda) in C? Of course
not, because when you code in C, you start thinking in C, and C has no
concept of closures, so how can you want something that you cannot
imagine?" So don't seek to learn languages - seek to learn ideas.
Languages just happen to be a suitable medium for doing so, but don't
get stuck on any one type of language either.
If you're completely stuck, just learn _something_. In the worst case,
you'll hate it and learn something different, and even that may not
necessarily be a bad thing.
> So, one of my friends tells me that I should learn C++, because "it's
> the best".
Languages are just tools. C++ is good for some tasks. Other languages
are better suited for others. Learn several, then learn to chose the
best one for the job.
Ilya
I hope you are joking. HTML is not a programming language.
> as if a language is windows-only. What I do care about is learning
> something new.
learn verilog or vhdl.
design hardware.
thi
A good point. As the (obscure) music
artist Steve Taylor once sang:
So they love Jerry Lewis in France...
Does that make him funny?
> Another friend tells me "define what you mean by 'better
> programmer'". So, that guy wasn't too helpful either.
Looks like he was thinking like a programmer.
To be a truly good programmer, you'll have to define what you
want down to the most seemingly insignificant details, since
computers have less than intuition than Alicia Silverstone.
(She's cute, but oh so dumb.)
> So I thought about this A LOT, and I'm wonderingif I could ask
> for advice on the internet.
HTH
Tim Hammerquist
--
If Microsoft built cars, the oil, gas, and alternator warning lights would
be replaced by a single "general car fault" warning light.
> So, one of my friends tells me that I should learn C++, because "it's the
> best". But, seriously, he doesn't know anything but C++, so I'm not too
> sure if he is qualified to give this type of advice... Another friend
> tells me "define what you mean by 'better programmer'". So, that guy
> wasn't too helpful either. So I thought about this A LOT, and I'm
> wonderingif I could ask for advice on the internet.
Figure out what you'd have to the most fun programming right now, then
just sit down and hit that huge wall of "what now"-problems and start
tearing it down.
/t
--
# Per scientiam ad libertatem! // Through knowledge towards freedom! #
# Genom kunskap mot frihet! =*= (c) 1999-2002 to...@svanstrom.com =*= #
perl -e'print$_{$_} for sort%_=`lynx -source svanstrom.com/t`'
otmoro...@yahoo.com (Scott) wrote in
news:b5a31bec.02091...@posting.google.com:
> HOwever, I realized that I want to be better at this stuff and learn
> more about programming. It's fascinating. I talked to some of my
> friedns and told them that I want to be a better programmer. I'm
> thinking of learning a new programming language, but I do not know
> which.
...
>
> Thanks in advance for your time...
In my opinion, you should learn MANY languages. You won't necessarily
use then, and don't learn them all at once (that's confusing), but
knowing how different languages approach similar problems, and knowing
the strengths and weaknesses of various languages, is an excellent way to
become a better programmer.
I would especially encourage you to learn an assembly language at some
point. You may never use it (you will probably never use it), but
knowing how the computer operates at its lowest level is extremely
useful, and will give you an edge over programmers who don't know that.
Aside from knowing several languages, the next best thing you can do is
to learn various algorithms and techniques, and how they're done in
various languages. Take a course on data structures and/or algorithms.
It may be confusing and abstract, but you'll be surprised years down the
road how much you use the information.
Also, along the way, it would behoove you to develop your own programming
style -- how you lay a program out, how you use variables, how you name
them, how you organize things to minimize your effort and the number of
bugs that you introduce. You will acquire your own style over time,
especially as you review your programs after they're written and as you
read code that others have written.
Good luck! :-)
- --
Eric
print scalar reverse sort qw p ekca lre reh
ts uJ p, $/.r, map $_.$", qw e p h tona e;
-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 7.0.3 for non-commercial use <http://www.pgp.com>
iQA/AwUBPYR1mmPeouIeTNHoEQKkqgCgiuH5BbwPp+s046kQIrYIcnau1sIAoJW6
NfOa+xCh4DCgRwjQA2OFfp8D
=byAQ
-----END PGP SIGNATURE-----
Hi Scott,
Well you got a lot of good advice up there, but they kinda skipped around
the issue a bit so I'll try and fill in the gaps:
I asked about a particular language to learn and although what eveyone said
above was great advice you DO still need to pick one or two to play with:
I started learning programing about 3 year ago and though i might not be a
shit hot as a lot of the guys here, I have the added advnatage of a. still
being a learner, and b. remembering what those very very first steps were
like.
So without further adue I'm going to suggest:
Language 1:
- Java - In my opinion it is definately one of, if not the best language for
a beginner who wants to learn modern programming eg Object Oreiented.
Java takes an awful lot from C++, which is also a very impressive language,
but it is also more complicated than java.
Java is deliberately very powerful but does a great job of hiding the
complexities of C++ and does a good job of watching out for you as you
learn. It will also take you 85% there if you want to go that final mile
and take on the mother language C++
The following books in conjunction with the internet (java is very well
supported on the net!) will get you to a more than competent level:
1. Thinking in Java by Bruce Eckel - Somehow manages to cover just about the
entire language - bells and whistel en all, all in one book!. Very good at
explaining the complex stuff like it were simple as pie!
2. Java for student by bell and parr(I think) - It is the other room!
Language 2
Depends on what sort of stuff you'd like to do with your programming. If you
want to look into cgi stuff and making dynamic web pages choose perl
Perl is ok (in my opinion) I dont think its the nicest language to learn
first off. I'm glad I came from a partial java background first.
If you want another language where you can make GUIs rapidly then I'd choose
VB - its a nice and straight forward language that is good for quick and
dirty programs but then you would use C++ java for harder work
The best advice though would be to listen to what everyone in this thread
says and follow up on conflicting suggestions - look into both sides of any
disagreements
Take care and enjoy
Simon
I totally agree and want to add that you should make sure to not only
learn different languages but also languages from different programming
paradigms. Different problems need different approaches, and to know
different approaches means to be able to solve more problems adequately.
Here are some suggestions:
* functional programming: Scheme, ML, Haskell
* imperative programming: Pascal, Modula-2, C
* object-oriented programming: Java, Smalltalk, Ruby, gbeta
* logic programming: Prolog
Some other languages allow to you to mix various paradigms: C++, Common
Lisp, Objective CAML, Python, Leda
Also make sure in the long run that you get to know both dynamically
typed (for example Scheme, Lisp, Smalltalk) and statically typed
languages (for example Haskell, gbeta, CAML, Java).
(I have definitely forgotten some, and the categorization is surely not
exhaustive.)
It will take you a while to become a really good programmer but it's
worth it. There's no general recommendation which language to start
with, just go with your gut feelings. There is no single "best"
language, all have their different tradeoffs and resolve different sets
of forces. And don't believe in hype: current trendy languages are not
necessarily good languages to start with with regard to the learning
perspective. (However, it might be good for economical reasons to
include them in the long run. ;)
All the best,
Pascal
Eric J. Roode wrote:
...
> I would especially encourage you to learn an assembly language at some
> point. You may never use it (you will probably never use it), but
> knowing how the computer operates at its lowest level is extremely
> useful, and will give you an edge over programmers who don't know that.
While the model presented by an assembly language is a useful level to
know, it is way above "how the computer operates at its lowest level".
It is just a symbolic representation of the lowest level that is
directly available to the programmer.
> Also, along the way, it would behoove you to develop your own programming
> style -- how you lay a program out, how you use variables, how you name
> them, how you organize things to minimize your effort and the number of
> bugs that you introduce. You will acquire your own style over time,
> especially as you review your programs after they're written and as you
> read code that others have written.
Don't get too wedded to any one style. Flexibility in styles is just as
valuable as flexibility in choice of language.
A style that works well in one language may not work so well in another.
For example, languages have different rules about where variable
declarations can be placed.
Also, large projects often have a required style for all code in the
project.
Patricia
If you like to get advice on prgramming from a person who wrote for
a company that has a reputation of producing shody products, and
libraries that are poorly structured.
I recommend starting with C, not because its the king of languages or
because I love it etc... just because most of todays languages use C syntax
and concepts. if you know C well learning many other languages like Java,
PHP, ... would be much easier.
Then move on to C++ and learn the concepts of object oriented programming...
my recommended source is Bruce Eckel's "thinking in C++" which is available
as PDF:
http://www.mindview.net is his url.
I also recommend not moving to C++ before learning C well, in other words
don't move to Object Oriented Programming before you feel you are good at
Structural Programming, I know many people here may object but this is my
opinion.
after this I recommend 3 steps, which are a little boring but I think
without knowing them one can't name himself a programmer:
1- Learn how a compiler works and whats acctually happening in CPU, Ram,
etc... when your program is running. learn some assembly programming just to
become familliar with it and try to write some simple assembly programs.
2- Learn general programming concepts and algorithms.
3- Learn some methodologies and analysis and design strategies.
let me add that me too learned programming just because I loved programming
and no other reason. I'm also a self-taught programmer, as I remember the
only language I learned with a teacher was C when I was 12 :)
Arash Dejkam
http://portfolio.dejkam.com
"Scott" <otmoro...@yahoo.com> wrote in message
news:b5a31bec.02091...@posting.google.com...
> Language 2
>
> Depends on what sort of stuff you'd like to do with your programming. If
> you want to look into cgi stuff and making dynamic web pages choose perl
> Perl is ok (in my opinion) I dont think its the nicest language to learn
> first off. I'm glad I came from a partial java background first.
Please don't promote the fallacy that Perl is a CGI-only language. Perl
is a general purpose language and CGI programming is only one area where
it is particularly popular.
I've been programming in Perl for seven years, and well under half of
that work has been CGI programming.
Dave...
--
Shoot some of those missiles, think of us as fatherless scum
It won't be forgotten 'cause we'll never say anything nice again
Will we?
--
**If at first you don't succeed - destroy any evidence that you tried!**
"Arash Dejkam" <dej...@softhome.net> wrote in message
news:am1vts$1roq8$1...@ID-97842.news.dfncis.de...
I'm not convinced - as you say, C++ is the king of all languages and it is a
great language at that, but I dont think someone just starting programming
should be needlessly exposed to the really advanced parts of the subject
unecessarily. Java would let him build experience and confidence as it would
keep a lot of the more triky elements at bay whilst he concentrate on
fundementals
Simon
A good point to raise Dave. I didnt (mean to) imply that perl was only for
cgi prgramming - just that if that was what he would like to do, then perl
is the obvious choice. He could indeed use C++ for cgi - it's obviously not
just for cgi either. I was just trying to imagine why he might like to
program and give him suggestions for a couple of scenarios
A good point you have! - Yoda
Simon
Dear Simon,
First of all I didn't say C++ is the king of languages or anything like
that, read my text carefully. I even currently like Java more than C++
myself.
secondly I'm not rigid about my opinion, maybe I'm a little biased or my
opinion is becuase when I learned C and C++ there was no Java :)
Why I recommend starting with C is to feel the underlying events happening
in a computer when a program is running and to know how stupid a computer is
!
I think if one start with Java may assume that computer is a very
intelligent thing that even understands some humanly concepts like Objects,
Classes, Inheritance,etc...
anyway, I have never been a programming teacher so I may not be good person
to talk about this.
this is my own opinion extracted from my own learning experiences.
Arash
So? It's a good book. It gives good advice. Who cares whether the
author's employer follows that advice?
Chris Smith
For Perl, you could read through www.perlmonks.com.
It's free, and newbie-friendly.
--
If you get any important email, mHook will push it to your cell phone.
Peace of mind, at http://www.mhook.com/
"Scott" <otmoro...@yahoo.com> wrote in message
news:b5a31bec.02091...@posting.google.com...
"This is a Perl group"? Take a look where this was cross-posted to:
comp.lang.c++
comp.lang.lisp
comp.lang.java.programmer
comp.lang.perl.misc
--
/-- Joona Palaste (pal...@cc.helsinki.fi) ---------------------------\
| Kingpriest of "The Flying Lemon Tree" G++ FR FW+ M- #108 D+ ADA N+++|
| http://www.helsinki.fi/~palaste W++ B OP+ |
\----------------------------------------- Finland rules! ------------/
"C++. C++ run. Run, ++, run."
- JIPsoft
Thaddeus, have you actually read the book "Code Complete" ?
If you have read the book, please tell us why you think the book
is not useful.
How about another book suggestion:
"The Pragmatic Programmer" by A. Hunt and D. Thomas.
As far as what language to learn: Is there something that you want to do
that Scheme can't do? If so, then find out what language *does* do what
you want and learn it.
If you want to switch languages because you don't like Scheme, then
identify what you don't like about it and find a language that doesn't
do it.
Otherwise, you might as well stick with Scheme until you know more.
Apologies - I took this as the expression of an opinion. The language you
used is ambiguous, not that it matters. I still happen to disagree with you
though:
>I think if one start with Java may assume that computer is a very
>intelligent thing that even understands some humanly concepts like Objects,
>Classes, Inheritance,etc...
I think if you are thinking about programming computers, you are probably
quite aware that it isn't really smart at all! - in fact just a number
cruncher!
>this is my own opinion extracted from my own learning experiences
Mine Also
Can you say "flamewar"?
--
Thomas Stegen
I don't think his language is ambiguous.
I think you 'exraction process' is 'ambiguous'.
Could you please show me, how you extract the essence "C++ its the king
of all languages" out of the above text?
If you fail, try it again with the following, more complete text, which
i've copied for your convenience:
>> Hi!
>>
>> I recommend starting with C, not because its the king of languages or
>> because I love it etc... just because most of todays languages use C syntax
>> and concepts. if you know C well learning many other languages like Java,
>> PHP, ... would be much easier.
>> Then move on to C++ and learn the concepts of object oriented programming...
I'm very curious.
>>I think if one start with Java may assume that computer is a very
>>intelligent thing that even understands some humanly concepts like Objects,
>>Classes, Inheritance,etc...
>
> I think if you are thinking about programming computers, you are probably
> quite aware that it isn't really smart at all! - in fact just a number
> cruncher!
as you said: probably.
probably no.
probably yes.
If the OP is aware of the non-smartness, he will reject the suggestion.
If the OP is not aware of the non-smartness, he will take the suggestion
into account.
>
>>this is my own opinion extracted from my own learning experiences
>
> Mine Also
The process of extraction.
Precision.
Betcher ass.
A lot if the really good programmers I know have come out of hardware
design. It teaches modularity and functional thinking and an attempt at
minimizing or, at least, centralizing state (makes it too hard to test
otherwise).
Plus, nothing smokes out fuzziness of thought quicker than a piece of
hardware that won't run. You can run though millions of test cycles during
the time that a simulation would still be starting up, Of course, it is a
bit expensive if you take it all the way to silicon :-).
faa
I object. I would, in fact, say that what you are saying here
has very little basis in reality. And isn't OO structural programming...
In any event, both OO and procedural programming are under the
imperative paradigm and are very similar to eachother. An OO language
just offers a few more builtin abstractions to play with.
Learning C++ on the basis of the C you allready know is more often than
not a very bad idea. (most properly written C programs invoke undefined
behaviour when compiled as a C++ program)
The book you are recommending is good though.
> after this I recommend 3 steps, which are a little boring but I think
> without knowing them one can't name himself a programmer:
> 1- Learn how a compiler works and whats acctually happening in CPU, Ram,
> etc... when your program is running. learn some assembly programming just to
> become familliar with it and try to write some simple assembly programs.
Not boring.
> 2- Learn general programming concepts and algorithms.
Not boring.
> 3- Learn some methodologies and analysis and design strategies.
Maybe a bit boring to learn, but not boring to know.
Remember this. It can make boring stuff interesting if you
manage to put yourself in the right mindset.
--
Thomas Stegen
> n my opinion, you should learn MANY languages.
Many different approcahes? Functional, pure OOP, strong typed, weak
typed, scripting, etc
> I would especially encourage you to learn an assembly language at some
> point. You may never use it (you will probably never use it), but
> knowing how the computer operates at its lowest level is extremely
> useful, and will give you an edge over programmers who don't know that.
>
>
Is HLA (High Level Assembly) adequate? It's asembly, but it's got a
C-like syntax.
Regs
Henry
_________________________________________________________________
Micro$oft-Free Human 100% Debian GNU/Linux
KMFMS "Bring the genome to the people!
www.debian.org - www.debian-br.cipsga.org.br - www.debian-rs.org
(karate chop here)
> I totally agree and want to add that you should make sure to not only
> learn different languages but also languages from different programming
> paradigms. Different problems need different approaches, and to know
> different approaches means to be able to solve more problems adequately.
>
> Here are some suggestions:
>
> * functional programming: Scheme, ML, Haskell * imperative programming:
> Pascal, Modula-2, C * object-oriented programming: Java, Smalltalk,
> Ruby, gbeta * logic programming: Prolog
>
> Some other languages allow to you to mix various paradigms: C++, Common
> Lisp, Objective CAML, Python, Leda
>
> Also make sure in the long run that you get to know both dynamically
> typed (for example Scheme, Lisp, Smalltalk) and statically typed
> languages (for example Haskell, gbeta, CAML, Java).
>
> (I have definitely forgotten some, and the categorization is surely not
> exhaustive.)
>
>
What about Eiffel's "design by contract" approach?
As a reductionist, I recommend PDP-11 assembly language. It's elegant, easy
to pick up, and once you understand the fundamentals of how computers work
you will have a better idea of what all other languages are actually doing.
After that: Smalltalk.
> Hi Scott,
>
> Well you got a lot of good advice up there, but they kinda skipped
> around the issue a bit so I'll try and fill in the gaps:
>
> I asked about a particular language to learn and although what eveyone
> said above was great advice you DO still need to pick one or two to play
> with:
>
>
Do you have a particular goal, or need? Maybe you just need to deploy
small scripts to do "little dirty jobs".
People like Perl for that - but that's because they hadn't come in contact
with Python, or perhaps Ruby.
Maybe you want to develop for the web. Consider Java, because of all the
bells and whistles.And it's a good general programming language, too.
Or, you want a language for operating system design: it would have
to be C/C++, because there's a huge legacy of code.
IM very, very HO, in my newbie experience (not a CS student, a medical
student with interest in bioinformatics/statistics/computer
algebra/medical informatics), Common Lisp will blow your mind. If you
study data structures in C (say, from Tannenbaum's book), for instance,
half of the time is all about what to do with the f*****g pointers. With
lisp, you can focus on the _problem_ and not so much on details that you
have to move out of your way to get the solution right.
However, be warned: it's not easy to make sense of the information that's
out there,
and it's so different, chances are you won't be able to ask some guy at
your local LUG to give you a hand on your problem. And lispers don't make
it easy for newbies, too: there aren't very many of the HOWTOs and stuff
to get you started. Apparently, they gather all their info from just
reading the code, which you don't know how to do yet And the specs:-)) We
_will_ get there, us newbies! :-) If you thought open source programming
was hard, finding out some things in lisp is cryptic or just a huge
learning curve, a huge amount of reading. And some things are just weird
:-)) Like "ring buffers" for string substitution. Turns out, you learn
what a ring buffer is, even though deep in your heart you know that there
would be an eeasier way in some scripting language. But, perhaps you end
up wanting to go and read Knuth, and that already indicates you're a
better programmer than the opens ource kid who just throws some code up on
the wall and see if it sticks...
So, for me, there's no question. When I first set out to learn an
"industrial" language (not a scripting language like Python, which BTW is
great) I did a lot of reading on the net and lurked at newsgroups. I came
to realize that there's a very good rationale for using Common Lisp, if
you just _listen_ to what the guys here at c.l.l. have to say (they're
pretty knowledgeable on other computer languages, too). And then good and
read some more. Also, you start to think deeper about programming in
general because there are a lot of things in lisp that aren't even on the
radar screen on other programming languages.
Cheers
Henry