| View previous topic :: View next topic |
| Author |
Message |
Boozan MAJOR GENERAL

 Joined: 17 Sep 2007 Posts: 4149 Location: Canada, Ontario Membership: Lifetime w/ Lifetime Date paid: 01 Feb 2010
|
Posted: Wed Aug 26, 2009 4:06 am Post subject: So you want to learn "How To Program"? |
|
|
Every so often, in most forums/tech blogs/webpages, the inevitable "How do I learn to program" thread pops up. Sometimes, there are minor variations on this same theme:
"I'm just starting; should I learn C++ or Java?" (replace by any combination of languages)
"Dude, I wanna get me uber haxor skillz" (the "I want to be a hacker/cracker/maker of keygens" post)
"I can barely turn on my PC; can I learn to program?"
"How do I become *really* good at programming?"
Regardless of the actual wording, the generic question may be understood to stand for "How do I acquire - or expand my existing - programming skills?" and the answers, provided by the forum members at breathtaking speed, are generally of the form:
"You gonna have to learn C - it's the mother of all languages"
"Learn VB - it's much easier than NET and it's what I use"
"Java, dude - compile once, run everywhere"
"Nah, I recommend C# - much easier than C++"
"Ignore the other guys - *REAL* programmers code in assembly"
Most of these contributions are well-intentioned, from well-meaning members, providing genuine and heartfelt recommendations.
As answers to the question of "How to Program", though, they are crap.
Let us explore why.
1. The Process of Programming
Imagine that a friend of yours revealed his/her intentions of becoming a master writer, dreaming of one day winning a Nobel prize for literature. Would your immediate recommendation be that he write that great new novel in Russian, because "Tolstoy and Nabokov wrote in Russian, and they were really good"? Or, if your friend wanted rather to become a painter, would you say that "watercolours are the best, cause they're really easy"? Perhaps some other friend would join in, saying "nah, all the greats painted in oils - you'll have to choose oils".
The problem with this approach is that you're giving advice on which tools to use to someone that may not have even understood what programming (or writing / painting / etc) is!
My take on programming is that it is, essentially, an art. Now, I don't ask you to take my opinion into consideration, for I am - among the real programmers - a non-entity, a nobody, a simple NULL. Fortunately, this view of programming as a form of art is shared (in fact, it was developed) by some of the truly great programmers. Check out what Donald Knuth decided to name his famous set of books:
| Code: |
| http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming |
and what he said on this very subject:
| Code: |
| http://www.paulgraham.com/knuth.html |
And my analogy of learning programming as akin to learning to write a creative novel is straightforward plagiarism from a Bruce Eckel's blog entry:
| Code: |
| http://www.artima.com/weblogs/viewpost.jsp?thread=255898 |
Obviously, there is the science aspect - after all, in an academic context, it is called "computer science". Without entering into semantics and pointless debate, let us simply consider that programming is solving problems through the use of a computer. As far as this thread is concerned, this definition suffices. The global approach to resolving these problems by use of a computer can, and should, be done in a scientific manner (proper analysis, documentation, revisions, etc); but the essence of the task - coding a solution to a particular problem - is essentially an art form.
Ergo, the computer programming (in our case, the novice programmer) is, or is trying to become, an artisan.
As such, it is no more possible to provide straightforward, guaranteed guidelines on how to become a great master programmer, than it is to tell someone how to become the next Mark Twain or Scott Fitzgerald.
2. So, how/where do I begin?
Well, that depends. Do you want to learn how to program, or do you need to learn how to program? The difference resides, as you've probably guessed, on how much choice you have on how and when to carry out this never-ending adventure.
If you need to be able to program so that you can overcome some calendarised goal (be it work, school or hobby-related), then seek out an informed opinion on what path you should be taking (including, obviously, the computer language most appropriate to that specific task). At worst case, do set out a thread seeking help, but make sure that you provide the full background on what it is that you need to overcome (project details).
If you decided to learn how to program, simply because you can and want to learn, then my advice is simple:
If it's available to you, seek out an organised "learn to program" course (school/college/community/online/tuition/etc). I don't care what form it takes, as long as you feel the teacher/instructor is good (how will you know? If you're looking forward to the next class, they're good. Stanford and MIT have some stuff on their webpages - check it out).
If that is not an option, there are quite a few books that cater to full beginners (never coded before), as well as to those that already have a smattering of programming experience; find one that you seem to like (peruse it first), check that it tells you how to obtain the tools of the trade (essentially, the compiler and the IDE) and start reading it and solving the problems/challenges within the book (all programming books are problem-based).
Finally, you must CODE. No other way around it: you can't learn to program by reading about it, or by wishing you could code. One learns to code by coding.
When you get to the end of that book, or have solved a significant problem in your first language, you may - if you wish - pick another book (some other language) and have another go.
3. How long will all this take?
Do you mean, to become a pretty good programmer - one recognised as competent and skillful by your programming peers? Ooh, not that long, but it's never less than...
10 years.
See why:
| Code: |
| http://norvig.com/21-days.html |
4. Damn it, man - just tell me what *bloody* language I should pick
Well, since you insist...
| Code: |
Pick the last word in your name (let's call it Surname)
Start at first letter of Surname
Until you reach the last letter of Surname (inclusive), start counting the letters
If your count is superior to 8, then you are destined to learn C++
But if count is equal to 8, you must learn Python
Else, if count is inferior to 8, Java is your answer |
By the way - in case you didn't guess - this was an algorithm: think of it as the recipe to devising a solution to the problem that must be solved. All that remains is to translate this general language recipe into a computer language (in other words, program the solution).
I must insist: the language you pick to start with doesn't matter as half as much as actually having someone (or something: a good book) teach you to think like a computer programmer ( experience will also get you there, eventually).
| Code: |
| http://openbookproject.net/thinkCSpy/ |
That's it; get crackin'.
RESOURCES
Read about programming languages here:
| Code: |
| http://en.wikipedia.org/wiki/Programming_language |
| Code: |
| http://home.nvg.org/~sk/lang/ |
| Code: |
| http://alternatives.rzero.com/lang.html |
____________________
 |
|
| Back to top |
|
 |
MrDylan SPECIALIST


Joined: 29 May 2009 Posts: 222 Location: Lost Membership: Lifetime w/ Lifetime Date paid: 22 Sep 2009
|
Posted: Wed Aug 26, 2009 6:48 am Post subject: |
|
|
I didnt not check the post date, but this is quite nicely organized and helpful.
Nice job. ____________________ My MSN: redsamurai08@hotmail.com
“Any man who can drive safely while kissing a pretty girl is simply not giving the kiss the attention it deserves.” — Albert Einstein |
|
| Back to top |
|
 |
HardDieYoung PRESTIGE LEVEL 6

 Joined: 07 May 2009 Posts: 7454 Location: Watching the cricket. Membership: General member
|
Posted: Wed Aug 26, 2009 9:09 am Post subject: |
|
|
Pick the last word in your name (let's call it Surname)
Start at first letter of Surname
Until you reach the last letter of Surname (inclusive), start counting the letters
If your count is superior to 8, then you are destined to learn C++
But if count is equal to 8, you must learn Python
Else, if count is inferior to 8, Java is your answer
Lol.
This will help a lot of people i hope, nice post Boozan. ____________________
 |
|
| Back to top |
|
 |
JC_Denton BRIGADIER GENERAL

 Joined: 23 Jan 2007 Posts: 3919 Location: Holland Landing, Ontario, Canada Membership: Lifetime w/ Lifetime Date paid: 02 Apr 2007
|
Posted: Wed Aug 26, 2009 9:25 am Post subject: |
|
|
guess im destined for C++ XD ____________________
"Never Argue With An Idiot, Because First They Will Bring You Down To Their Level, Then Beat You With Experience" -ADHD aka JC_Denton aka Alex aka T.U.M
"If the US and Canada were in Jail, America would be the bitch. Think about it, Canada is bigger, and on top."
Have A PSP? Not Modded? Go HERE To Find Out How To Do It
Have A Modded PSP? Want Some Games? Go HERE For My PSP Game Thread [Updated Last: 3/23/2011] - Newest Game: Fate/Unlmited Codes [USA]
Emulators Uploaded For the PSP: NES (Nintendo), SNES (SuperNintendo), GAMEBOY ADVANCED
Have A PSP? Having Troubles With It? Go HERE For Help On It |
|
| Back to top |
|
 |
de.bug High Roller CODER

 Joined: 04 Sep 2008 Posts: 19028 Location: boot sector Membership: 4 weeks w/ XEON MEGA PACK Date paid: 11 May 2011
|
Posted: Wed Aug 26, 2009 12:38 pm Post subject: |
|
|
| harddieyoung wrote: |
| But if count is equal to 8, you must learn Python |
Don't let Python fool you, it is actually quite powerful and can easily be embedded in a C++ app. I have done some seriously large Pyro based distributed apps using it and coded with it for 8+ years.
Even custom import modules to store shared modules in a central mySQL database. |
|
| Back to top |
|
 |
HardDieYoung PRESTIGE LEVEL 6

 Joined: 07 May 2009 Posts: 7454 Location: Watching the cricket. Membership: General member
|
Posted: Wed Aug 26, 2009 1:06 pm Post subject: |
|
|
| de.bug wrote: |
| harddieyoung wrote: |
| But if count is equal to 8, you must learn Python |
Don't let Python fool you, it is actually quite powerful and can easily be embedded in a C++ app. I have done some seriously large Pyro based distributed apps using it and coded with it for 8+ years.
Even custom import modules to store shared modules in a central mySQL database. |
Ok....then.....
Just out of curiosity what would iphone apps be made using? ____________________
 |
|
| Back to top |
|
 |
de.bug High Roller CODER

 Joined: 04 Sep 2008 Posts: 19028 Location: boot sector Membership: 4 weeks w/ XEON MEGA PACK Date paid: 11 May 2011
|
Posted: Wed Aug 26, 2009 2:39 pm Post subject: |
|
|
iPhone SDK
:D |
|
| Back to top |
|
 |
Zopherus1 PRIVATE

 Joined: 30 Nov 2009 Posts: 25 Location: Mars Membership: General member
|
Posted: Tue Dec 01, 2009 8:42 pm Post subject: |
|
|
I'm not that good of a coder...
Still in my first year of Computing...
But I think Python and C++ are very good langs...
Also...I HATE JAVA Dont know why...just hate it xD
The uni gave a a shitty compiler and its AWFULL -.-
Anyway got off-topic
Great post dude ^_^ |
|
| Back to top |
|
 |
Hawkeye SPECIALIST

Joined: 17 Nov 2009 Posts: 293 Membership: General member
|
Posted: Mon Dec 21, 2009 12:18 am Post subject: |
|
|
| I hate bumping old threads, but what did you learn first bug? |
|
| Back to top |
|
 |
-Loki- STAFF SERGEANT

Joined: 17 Feb 2007 Posts: 738 Membership: General member
|
Posted: Sun Jun 13, 2010 1:57 am Post subject: |
|
|
I felt like I was in a Computer Science 101 class with the teacher eloquently illustrating what programming is all about. Great post.
A while back I thought computer programming would be a great place for me. But since then there's a number of things I realized. Sure I could learn to program but for me it's very draining, it takes a lot of energy and I just feel like a blob after working on a project for even a short amount of time.
I didn't understand why that was until recently, when I purchased a book called "Strengths Finder 2.0" took the test and realized my strengths (characteristics or tendencies that energize, excite, & keep you motivated) aren't fitted to programming. Could I do it? Absolutely, but I'd be much better off doing something that involves organizing people and putting their strengths to work than analyzing and creating a strategy of how to make some intricate piece of program work. ____________________
 |
|
| Back to top |
|
 |
Intimidation PRIVATE

Joined: 19 Aug 2010 Posts: 1 Membership: General member
|
Posted: Fri Aug 20, 2010 2:16 am Post subject: hey i need your help Boozan |
|
|
i was wondering if you can help me put with programming. maybe do you think you and me can work on a project with programing or diong a liitile thing so i can learn the basics and go on from there, if you could that would be great.
thanks, Intimidation |
|
| Back to top |
|
 |
killerdude PRIVATE

Joined: 13 Nov 2010 Posts: 22 Membership: General member
|
Posted: Sat Nov 13, 2010 1:58 am Post subject: Picking a Programming Language |
|
|
IMO, picking a language to start with should be based on your end goal. Most programming languages have their own strong point in which they excel more than other languages. So understanding the differences may help with choosing one to start with.
Assembly is a really really uber language to learn but only few people could really master it (IMHO). There are very few commands to have to remember but you must understand an astronomical amount of data in how to make a program do what you want. Something you could do in 10 lines of code C++ may take hundreds of lines of code in Assembly. Another downfall of Assembly is that the language can be different on different (processor) architextures. The strong point in Assembly though is that if you know assembly you can directly communicate with hardware and if you code correctly, your programs will operate more efficiently than any program you compile with any other langauge. If you want to learn to Reverse Engineer and do real hacking (software exploitation), having a fair amount of Assembly Language with C/C++ will take you far.
C/C++ is a lot easier to learn then assembly however there are a lot of libraries each with several (commands) functions to remember when compared to Assembly (this goes for other languages as well). C is more of an top down language (procedural) with what you see is what you get. Im not sure exactly why someone would pick learning C over C++ but Im sure someone else can answer this. C++ is an Object Oriented Programming (OOP) language. I guess you could say the difference is... In OOP you create an Object, you give it properties and even functions. The closes thing in C is to create a structure however you can only give the structure data elements... not functions. The different between a spreadsheet and a database. If you wanted to create massive games (like WoW, CS, MoH, etc...) your best bet would be C++. C/C++ advantages over Java would be along the lines that programs will operate more efficiently and faster because they are compiled specifically for the architecture they run on. Most game hacks and hacking programs are more than likely written in C/C++. Programs written in C++ for the most part are cross-platform capable, all you have to do is recompile them for each architecture you wish your program to run on.
Visual Basic... god I wish I never learned this langauge... Prior to .NET it was a procedure driven language. It really through me for a loop going straight from VB2-VB6 to Java and C++. All types of concepts that were new did not make since to me. Visual Basic programs are going to be less efficient than C/C++ programs but possibly faster than Java. Some functions you can do with other languages are more complicated to have direct control over using Visual Basic. At the same time, they make it easier to learn because the language is close pseudo code. VB still has a strong point though... It was created for rapid program development. Need something quick and dirty, VB is your man or woman if your offended lol.
Java... Java's better selling point is you write and compile a program once and can run it on any architecture which supports Java. Java is also a OOP language like C++ and .NET (which Im not going to talk about, screw Microsoft... wheres my DirectX 10/11 for XP). I consider Java to be less efficient than C/C++ in that its not directly compiled to the native processors language... The Java engine interprets the program while it is being ran (if I remember correctly). Some large programs like ArcSight are done in Java. This is not really the language for people wishing to get into the gaming or hacking scene (currently). However, it is becoming more and more popular.
Perl/Python/Ruby... These are more scripting languages than programming IMO... no offense to anyone (these are very powerful). I believe these are all procedure languages and cross-platform capable just like Java. They are not really compiled... They are interpreted which is why I do not believe they could ever be as fast as C/C++ programs. If you want to be a good system admin, hacker, or tinkerer... you should pick up atleast 1 of these in addition to a non-interpreted language. Most programs are not written with these languages, just nifty tools... However I give props to Ruby as the latest Metasploit was completely done in Ruby, I was recently told.
When I compare efficiency of languages, obviously a better programmer could optimize a program in their language more than a noob in another... However, Im judging based on equally experienced programmers.
I hope this helps in determining what language(s) you would like to learn. |
|
| Back to top |
|
 |
killerdude PRIVATE

Joined: 13 Nov 2010 Posts: 22 Membership: General member
|
Posted: Sat Nov 13, 2010 2:10 am Post subject: Forgot |
|
|
| If you do decide to learn (and master) Assembly language... dont forget to pick up a pocket protector, couple pens, a pair of glasses with white tape over the nose peice, a copy of Revenge of the Nerds (to learn how to intermingle with your own people) and a book and how to talk to woman... they are definitely not machines. |
|
| Back to top |
|
 |
aspearman PRIVATE

 Joined: 27 Jul 2011 Posts: 67 Membership: General member
|
Posted: Thu Aug 18, 2011 6:29 pm Post subject: |
|
|
Thx ____________________ [IMG]http://i281.photobucket.com/albums/kk223/FibonKylix/aspearman.png[/IMG] |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
|
82,801,423
Powered by phpBB © 2001, 2005 phpBB Group
|