Teaching myself a little computer science over the summer

<p>

</p>

<p>The kind of memory and pointer management I’m thinking of here are the “basic” tasks of allocating memory, copying the data you want to work with into that memory, accessing that memory (within the allocated bounds), and freeing that memory when it is no longer needed. This is doable with patience. OTOH, if people would rather just manipulate objects, that’s fine also. But it is not “too difficult” to manage resources – it’s just a matter of following directions.</p>

<p>In open-sourceware, you get to see how the programmers managed resources, and you can even experiment. For example, take some of those programs and remove a check for a null pointer, or assign a random value into a pointer variable. See if the program won’t compile, and why. See if the program crashes, and use a debugger to find out where, and why, Thus, you gain valuable skills.</p>

<p>

</p>

<p>I think the order is Java, C#, C++, php, Python.</p>

<p>Enter Java, C#, C++, php, Python on this Web site, you will see as of this moment:</p>

<p>Java - 17623 jobs
C# - 9269 jobs
C++ - 6429 jobs
php - 3776
Python - 3492</p>

<p>There is some overlap in the above stats, but I think it’s quite representative.
I also want to add: C++ jobs are more serious jobs.</p>

<p>PHP is not really a programming language for CS major.
<a href=“http://www.dice.com/[/url]”>http://www.dice.com/&lt;/a&gt;&lt;/p&gt;

<p>Start with Zedshaw’s Learn Python the Hard Way before moving on to Diveinto Python.
[Learn</a> Python The Hard Way | A Beginner Programming Book](<a href=“http://learnpythonthehardway.org/]Learn”>http://learnpythonthehardway.org/)</p>

<p>The idea of there being a particular “order” to the languages you learn is not true at all.</p>

<p>While I believe it is true that you should learn something like Java/Python first, the idea that there is any such order as “Java, C#, C++, php,[then] Python” is very misleading.</p>

<p>Once you have mastered your first language, you will be able to pickup different languages very quickly; the only exception would be languages in different paradigms (but that should be relatively quick as well).</p>

<p>After you learn your first language, learn whatever you think you need - for example, I learned Java first, and then studied Python, not because of any specific order, but because I was interested in web frameworks, one of which is written in Python.</p>

<p>If you are interested in systems/low-level stuff, go ahead and learn C after your first language.
Interested in Windows applications? Maybe learn C#.
Interested in iPhone programming? Learn objective-c (note: Androids use Java).</p>

<p>^ I am not talking about the order for learning. I am talking about the demand in the job market. Java and Python is better for learning concepts about CS.
There are more jobs for C++ than Python now but I believe number of jobs for C++ is decreasing and number of jobs for Python is increasing.</p>

<p>Jobs by language listed in order of how cool those jobs would be:</p>

<ol>
<li> C/C++/assembly/Fortran (systems software, embedded, gaming, science simulations)</li>
<li> Java</li>
<li> all other languages except VB</li>
<li> VB</li>
</ol>

<p>^Entirely your opinion… How exactly do you quantify cool? Should we even bother debating whether X language is cool or not?</p>

<p>For example, I think Java is the coolest of all because its applications span the applications that someone in college is most likely to have been exposed to: gaming, website back-end programming, Android smartphone gaming/mobile apps, and desktop applications.</p>

<p>Well doy it’s my opinion, but it just so happens that my opinion is accurate. :-P</p>

<p>Well, no. The instant you ranked Fortran and assembly as the languages with the “coolest jobs,” ahead of Java, I knew that your opinion was, at best, highly subjective and variable, and at worst, 100% inaccurate.</p>

<p>Fortran is no longer used for anything except highly specialized and niche scientific computing and benchmarking.
You are not going to write in assembly for anything other than bootloaders, compilers, device drivers, and parts of operating systems. Only a tiny fraction of jobs in CS would ever require assembly. Even most operating systems jobs will use C, and not assembly.</p>

<p>

</p>

<p>That’s what I meant when I said the coolest jobs. Of course, even scientists are ditching fortran these days… But for the coolest scientific simulation and graphics software, it’s all about C/C++/assembly, baby!</p>

<p>Or do you think stuff like databases and web apps to order light bulbs are cool? Do ya? Huh?</p>

<p>Graphical simulations are NOT going to be written in Fortran. They will be written in Matlab or Python. If you try to write that in Fortran, you will spend twice the amount of time coding - something a scientist would not want to do.</p>

<p>Good luck with graphics simulations in assembly. A project that will take a week in Java would probably take two months in assembly.</p>

<p>You seem to forget the OP is just starting out. What is cool for someone new to CS is exactly that - web applications, simple games. What’s the coolest and most interesting field in CS right now? It’s in web and mobile development. Unless someone is a research physicist or something, they will have little interest in developing a scientific simulation. On the other hand, a college student will have great interest in developing a mobile app, or a smartphone game, or a website that connects people by video based on shared interests (I’m thinking about Airtime, here).</p>

<p>Java is not cool.At all.It is a good language for enterprise software,but not startups as such.For that,you might want to try Python/Django,Ruby/Rails or Nodejs</p>

<p>Java is cooler than it used to be because of Android programming, but in general it makes me think of enterprise stuff (ew).</p>

<p>I think one area that is sort of cool is stuff that needs to run at large scale (i.e. cloud computing, computations on large datasets). This is mostly language-agnostic.</p>

<p>@villager: Node.js, Django, and Rails are not languages…</p>

<p>However, C/C++ is certainly more “enterprise”-related than Java, though Java is certainly used heavily for enterprise software.</p>

<p>^ No. C/C++ is more for embedded systems and firmware.
C++ used to be dominant in enterprise servers but not now.</p>

<p>@terenc,i know.They are web frameworks,which is why i grouped them with their parent languages.You will have to know Javascript for Node.Js.</p>

<p>Java is too verbose for my taste.</p>

<p>It seems like there aren’t many languages that are actually being compared to each other in terms of what is easiest to learn. Those kind of comparisons would actually be helpful here.</p>

<p>So, as a beginner trying to learn**, here’s my two cents:</p>

<ul>
<li><p>Jobs/career opportunities don’t matter. This is about trying to learn a language, to become familiar with it, and hopefully gain knowledge to learn other languages in the future.</p></li>
<li><p>Elegance doesn’t matter. Shorter code that looks prettier but is harder to grasp means nothing (for now). (Of course, a language that is both verbose and difficult to understand would not be an ideal language for a beginner.)</p></li>
<li><p>Usability does matter. As motivated as people might be, it’s easier if you can actually use the language and get some actual results. It’s a bit frustrating to not be able to do anything.</p></li>
</ul>

<p>**I only know HTML/CSS and am learning Javascript. Since I don’t have any experience with C/C++/Java/etc. I’m just saying what’s true for me.</p>

<p>If you know the basics of programming (basic logic, flow control, etc.) and want to learn more advanced stuff, try a functional programming language. Something like OCaml or Haskell. </p>

<p>Recursive data structures and algorithms are much clearer when written in functional programming languages rather than in messy things like Java. Also basic things like types and pointers have a much nicer implementation in OCaml than, say, Java. It’s better for learning.</p>

<p>I also think the availability of cool projects for a beginner to do is also key because the only way to improve is to work on projects of your own doing.</p>

<p>It is with that in mind that I have always recommended in this threat that a beginner starts with Java or Python.
To repeat for the third time or something, there is a reason that Berkeley/Stanford/MIT/CMU all start out with Python or Java in their intro CS classes.</p>