tags:

views:

104

answers:

9

After reading so many articles and blog posts on this vs that such as "RIA vs Web development", "Silverlight vs HTML5", "iPhone development vs Windows Phone 7 development", I realized that it doesn't really matter who wins. In a few years something new will come out, new frameworks will emerge, new technologies will be adopted.

In the end it seems irrelevant to pick one technology over another (even if it's a winner) because tomorrow new technology will emerge.

One can spend weeks or months learning iPhone Development,and just focus on iPhone development. Five or ten years from now, chances are iPhone won't be the "hottest" smartphone anymore. But what happens to the iPhone developers? Those who have pigeon-holed themselves into just iPhone development will be simply out of luck.

So if you share the same vision as me, what would you recommend learning in order to quickly pick up new programming languages, frameworks or APIs? Are there books that teach the fundamentals that all technologies share, regardless whether you are developing Facebooks Applications or Windows Phone 7 Silverlight Applications?

+5  A: 

Most of the core concepts of programming are the same across languages, at least within the paradigm. That's why a developer who uses one language (e.g., C++) for years and then switches to another language (like Java or C#) still has an advantage over someone who just learned how to program in that language, even though he may not know any of the APIs or libraries. There are enough things you can do to practice the language you choose before you ever have to use existing APIs or libraries.

For instance, learn to write write a model for a chess game with rudimentary console-based UI in Java or Objective-C before you try to write one for a smartphone with native GUI.

Uri
+1  A: 

this is the reason i went for applied math instead of computer science.

Randy
+1  A: 

A college CS course most likely. Failing that, you need to go the bookstore and look at the section on computer science. It will be a small section nestled between all the books on the latest and greatest overhyped technologies.

You can start here and here

Jherico
+1  A: 

Get yourself a library card.

buckbova
+1  A: 

I would recommend MIT free computer science courses

http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science

shipmaster
+3  A: 

Design patterns
Unit testing
Agile development
etc...

In general, learn to be a good software engineer and have excellent understanding of what's involved in delivering a piece of software.

The rest is learning new technologies as they come out and apply to your job... :-)

Franci Penov
+1  A: 

SE2004 and SWEBOK provide exactly the information that you are looking for.

Be aware, that the total volume of knowledge referenced in SWEBOK is of 5000 pages and its mastering requires undergraduate education and at least 4 years of professional experience.

Vanuan
+4  A: 

I definitely share your vision, but it is hard to find books that express fundamental ideas independent of programming language, since programming languages are the way we express ideas. But here are a couple of suggestions:

  • For the fundamentals of programming with loops and arrays, David Gries's Book The Science of Programming or the more ambitious original, Edsger Dijkstra's Discipline of Programming.

  • For fundamental analysis of algorithms operating on a machine level, where every instruction and every bit is important, Don Knuth's three-volume Art of Computer Programming.

  • For an overview of many high-level issues related to algorithmics and program design, with a very high signal-to-noise ratio, Jon Bentley's Programming Pearls and More Programming Pearls.

  • For the practice of programming, with a slight bias toward particular languages or environments, Kernighan and Pike's Practice of Programming or Steve McConnell's Code Complete.

  • For great ideas in computing expressed as concisely and beautifully as possible, but heavily biased toward Scheme, Abelson and Sussman's Structure and Interpretation of Computer Programs.

What would you recommend learning in order to quickly pick up new programming languages?

I'll confine myself to programming languages since that's a field in which I have some expertise.

The easiest way to prepare yourself to pick up new programming languages is to be well acquainted with different programming languages that offer very different programming models. I believe a well-educated programmer should be able to work easily in these four models:

  • Machine-level programming. C is the obvious choice but C++ is a reasonable alternative.

  • Object-oriented programming. I strongly recommend Smalltalk since it is pure, unadulterated objects. Self is another interesting choice as is Ruby. Java is OK but is really a procedural language with objects hung on the side. C++ and Scala are interesting choices, but both mix objects with a confusing variety of other features.

  • Functional Programming. Haskell is where the action is, but it's not such an easy language for beginners. Other good choices include F#, Objective Caml, Scheme, and Standard ML. More idiosyncratic choices might include Erlang or Clean.

  • Scripting. For power-to-weight ratio nothing beats Lua, but Python and Ruby are also honorable choices. bash/ksh and awk are a bit out of date, Perl has too low a power-to-weight ratio, and Tcl is too poor a design to be worth mastering.

Beyond that I might recommend learning a language with a very unusual evaluation model, like Icon (the most imaginative language ever designed for processing strings) or Prolog (the first logic-programming language to catch on).

Norman Ramsey
A: 

I think I would recommend learning C#. I mean Microsoft's .NET Framework allows for developers to virtually use one language to build applications for any environment. You can write C# to build Windows Desktop Application, C# when you build your ASP.NET WebForms or MVC applications. The current Windows Mobile 6.5 you can also use C#.

Obviously the same is true with Java that you can build Desktop, JSP Web Applications, and Mobile Applications. I feel this is a true strength to these frameworks and allows a developer to learn once and work on a multitude of environments.

I think Microsoft even allow C++ to be used with the .NET framework as they all use the same Common Language Runtime. Technology is always changing but learning a language where you can easily adapt to different deployment platforms with just having to pick up the extras that can be used on those platforms is an advantage.

Jonathan Stowell