A Newbie Coding



  • What is the best way to start coding, i would like something that is multi-platform (im a big OSS guy) and easy to learn



  • First you should learn how to create syntactically correct structures (like sentences for example). Staying in the bounds of the grammar of your programming language is crucial, otherwise you'll fail fast and early. If you mastered that you have several roads to go. Start with C(++) for a very techy, low level approach that in the end will give you most likely the greatest skill though. Start with Java for true platform independence, however make sure you have learned and understood the basic concepts of OOP before. Lastly, start with scripting languages (Perl, PHP, JavaScript, Ruby) for a quick-and-dirty approach wherer you have to follow very few rules and will see impressing results very soon. But be aware that this is also the way that has by far the highest risk of creating monumental WTFs and that it can become very difficult to switch to more powerful languages later.



  • @PSWorx said:

    First you should learn how to create syntactically correct structures (like sentences for example).

     

    I find your ideas intriguing and would like to subscribe to your newsletter.  



  • Avoid script languages. Also avoid Visual Basic and other WTFy languages like DataFlex (You've probably never heard of DF. I envy you.)

    Start with C++, C# and Java. These languages are a bit alike as they have common features (C Family).

    Learn OO: http://www.bluej.org/

     



  • You need to learn scripting languages AND "hard" languages at the same time. It is important to understand the tradeoffs of each system (compile->integrate) vs. (fetch resource->evaluate) and understand what is a language vs. the language environment and standard library.

    Stay away from Java as a first language. Java is too conceptually abstracted away/simplified from the languages it was inspired by and designed to replace that many lessons learned are lost when beginning in that system (doomed to repeat mistakes)

    C# is okay. If only because the object system is richer. I would stick with C/C++/Obj-C/D. Or Objective Caml if you want to try a different paradigm without turning your head inside out.

    At the same time: look at Ruby, Python, Perl or JavaScript. Pick any two of the scripting languages and become proficient with them as well.

    The hallmark of a good programmer is being able to recognize how to do the same job in multiple languages, and to be able to evaluate which environment is best suited for doing the job effectively.

    This is how you find the way. 



  • IMO good languages to learn the concept of programmings are easy-to-read, easy-to-understand languages like Pascal, Ruby and Basic. I would give too much emphasis on multi-platform in the beginning, since your first programs will suck anyway and it takes some time to become able create something that is interesting to others; by the time you have probably already learned another language.



  • Start with a little bit of C.  It is fairly easy to get started with and it gives you a feeling for old-style low-level programming.  That's a good thing to do.

    Then realize to yourself, C should not be used in any new large projects these days.  Working in C you will spend your time worrying about memory and pointers, instead of worrying about objects and design, so C is not a good language to keep gonig in.

    After doing a little bit of C (not very much, just a little) move on to a language which makes you think in objects.  I know, Java makes you think objects and it's a great language.  The problem with Java is that the learning curve of figuring out how to compile a program and run / deploy it is so high.  "I just learned Java and now I also need to learn how to use Ant and Tomcat and...."  That's too much and it will be frustrating.  So you need to use another language that doesn't have any of those issues, and lets you get right to objects and running objects.  I would recommend Ruby.

    From there... you will get experience and understand what is going on, and then try Java.

    I recommend Joshua Bloch's [i]Effective Java[/i] as the best Java book out there.

    [url=http://chiralsoftware.com/blog.jsp]Software development blog[/url]



  • @kirchhoff said:

    At the same time: look at Ruby, Python, Perl or JavaScript. Pick any two of the scripting languages and become proficient with them as well.

    I would say don't start with JavaScript, if only because there is an overwhelming abundance of really bad code examples on the 'net, and it's too easy to learn really bad habits at the start.  Stick with Python or Ruby because their userbases are small and tend toward more experienced coders (than JS, at least).  Perl's cool, too, because it's so easy to get going.  But pick up an OOP language soon afterward, because that's the way the industry has trended. 



  • @bstorer said:

    But pick up an OOP language soon afterward, because that's the way the industry has trended. 

     Those are all OOP languages. Or maybe the definition has changed since I last checked.

     What you really meant was: pick up a compile-able language (as if to give your software an aire of respectability or business applicability).



  • @kirchhoff said:

    @bstorer said:

    But pick up an OOP language soon afterward, because that's the way the industry has trended. 

     Those are all OOP languages. Or maybe the definition has changed since I last checked.

     What you really meant was: pick up a compile-able language (as if to give your software an aire of respectability or business applicability).

    I mean to pick up an OOP language if you opt first for Perl.  While Perl supports its own (special) brand of OOP, it's really a procedural language at heart.  I just recommend backing it up with a language that was designed around OOP principles, instead of having them kinda tacked on.



  • @bstorer said:

    I mean to pick up an OOP language if you opt first for Perl.  While Perl supports its own (special) brand of OOP, it's really a procedural language at heart.  I just recommend backing it up with a language that was designed around OOP principles, instead of having them kinda tacked on.

    The whole point of Perl is that it allows you to be paradigmic without being paradogmatic. It can do everything that a language "designed around" "OOP principles" can do - the only difference is that it can do other things too.

    At heart, Perl is Perl. It is not an "OOP language" or a "procedural language", but it is an expression of the observation that thinking in terms of "OOP language" or "procedural language" is just crippling yourself. 



  • DON'T LEARN PERL!  Perl will not teach you anything valuable about software design.  Perl will teach you that anything goes, that sloppy is ok.

    There isn't even a specification for Perl.  Perl wasn't designed, it just sort of happened.



  • @JavaCoder said:

    DON'T LEARN PERL! Perl will not teach you anything valuable about software design. Perl will teach you that anything goes, that sloppy is ok.

    There isn't even a specification for Perl. Perl wasn't designed, it just sort of happened.

    Great!  Let's start this argument again!  Does anybody want to throw out some jibes at VB while we're at it?

    Look, you'll never catch me writing anything more than 30 lines in Perl; it just doesn't work the way my mind works.  But Perl's great at what it does, it has a huge community, and it's great place to learn basic programming concepts because it's so forgiving.

    From your user name, I'm guessing you'd recommend Java?  I use Java all the time, but Java has its flaws, too.  For example, it's mind-numbingly strong-typed.  And it's GUI toolkit is laughable.  And the sheer amount of classes needed to get anything done is just frustrating.



  • @bstorer said:

    From your user name, I'm guessing you'd recommend Java?  I use Java all the time, but Java has its flaws, too.  For example, it's mind-numbingly strong-typed.  And it's GUI toolkit is laughable.  And the sheer amount of classes needed to get anything done is just frustrating.


    No, read my post above; I don't recommend Java for a newbie coder.  It is mind-numbing to get the IDE, build and deployment working, among all the other things like figuring out classes and all that.  All those things get in the way of learning to write code.

    I would suggest an OO language that makes it quick to get started, like Ruby.

    As for Java's strong typing, that is one of its good features.  It catches so many bugs at compile time.

    The GUI toolkit is laughable until you use NetBeans Matisse to lay out your pages, and then it's quite serious.  The only problem right now is there isn't a data binding system that can bind storage to Swing components in some way.  But that is coming too.



  • @JavaCoder said:

    Perl will teach you that anything goes, that sloppy is ok.

    On the contrary, it is impossible to write non-trivial software in perl without unlearning this, and strongly developing your senses of laziness, impatience, and hubris. Perl is not known as the "unix swiss-army chainsaw" for nothing: if you approach it thinking that sloppy is ok, you'll cut your own damn leg off. 



  • @JavaCoder said:

    @bstorer said:
    From your user name, I'm guessing you'd recommend Java? I use Java all the time, but Java has its flaws, too. For example, it's mind-numbingly strong-typed. And it's GUI toolkit is laughable. And the sheer amount of classes needed to get anything done is just frustrating.


    No, read my post above; I don't recommend Java for a newbie coder. It is mind-numbing to get the IDE, build and deployment working, among all the other things like figuring out classes and all that. All those things get in the way of learning to write code.

    I would suggest an OO language that makes it quick to get started, like Ruby.

    As for Java's strong typing, that is one of its good features. It catches so many bugs at compile time.

    The GUI toolkit is laughable until you use NetBeans Matisse to lay out your pages, and then it's quite serious. The only problem right now is there isn't a data binding system that can bind storage to Swing components in some way. But that is coming too.

    Fair enough.  I've never used Matisse.  Every Java GUI builder I've used simply delays the torture, not relieves it.  How is it that much more effective?

    I agree that Ruby (Or how about Python, with it's forced consistent indentation?) would make a great first language.



  • Matisse really is excellent.  Like everything else in Java there is quite a learning curve before it becomes truly useful, but once you get through that it is excellent.

    I don't personally have experience with them, but Ruby and or Python seem like the obvious choice for new coders these days.  The other languages are either too awful (perl) or too hard to get into (Java).  Or they focus on things that should not be the main focus of programming, like memory management (C).

    The ideal qualities of a language for newbies:

    1. The tools for editing and executing should be obvious and easy to use with no learning curve, ie, if you know Wordpad, you should be able to write and execute your program.  Any reasonable scripting or non-compiled language passes this.  Java flunks this big-time: you gotta learn javac and Ant and maybe also Tomcat etc before you can even run "hello world".  And Java Enterprise flunks this even harder.  Newbies shouldn't have to learn about compilers, at least not immediately.

    2. The language should focus the programmer on thinking correctly.  Perl flunks this; perl lets the programmer do practically anything.  C flunks this; the programmer has to immediately start thinking about memory management issues.



  • How anyone gets going with a Java EE server I'll never know.  I spent the better part of a week once trying to learn enough about EJB, Servlets, JSP, and Tomcat just to get a basic website going.  And then I added Struts and Hibernate.  And Faces and Spring are out there, lurking, mocking me from the shadows.  Fact: I have an entire shelf of O'Reilly books about J2EE/Java EE technologies.  Another fact: I gave up on all of them and moved to Ruby on Rails.  A third fact: I only occasionally regret it.

     



  • As a person who is in contact with a huge number of people were introduced to programming in C, I'd discourage you from starting with low-levelish languages. The technical details connected with the computer architecture are often confusing, it's easy to make a mistake with which the compiler won't help you at all and you're likely to be very frustrated by hunting elusive bugs. I think you'll be best off starting with Python. You'll be able to concentrate on the concept you're trying to implement without worrying about technicalities. It's syntax encourages clarity and brevity which are foundations of good style. It also has a very universal but not overwhelmingly large standard library. From what I'm told, Ruby is similar in idea. I believe MIT uses Scheme for it's introductory courses which is quite a recommendation. Stay away from Java unless you hope to find work as a programmer. Pascal is plain stupid.
     



  • Just learn UML and let softwares like Visual Paradigm generate the code for you! That too in the language of your choice!


     

     


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.