how to learn a new language

41
For Developers By Mohsin Hakim How to Learn a New Language

Upload: mohsin-hakim

Post on 13-Jan-2017

153 views

Category:

Education


0 download

TRANSCRIPT

For Developers By Mohsin Hakim

How to Learn a New Language

If you have an interest in creating computer programs, mobile apps, websites, games or any other piece of software, you'll need to learn how to program. Programs are created through the use of a programming language. This language allows the program to function with the machine it is running on, be it a computer, a mobile phone, or any other piece of hardware.

Learning a New Technology

Click icon to add picture

Click icon to add picture

Click icon to add picture

Agenda

1. Overcoming Inertia2 - Watch the Pros3 - Let the Information Flow Begin4 - Listen and Watch5 - Time for Action6 - Blogging7 - Feel the Pulse8 - Meetups and Conferences9 - GitHub10 - Concentrated Learning

Think about the perks of learning more about new technology.

Learning new technology can help simplify basic life tasks, and can even open up the possibility of experiences you never even dreamed of. Think how much easier it becomes to pay your bills online instead of having to head to the payment counters, find a car park and deal with queues. Then there are all the amazing options available to you of staying connected with family and friends who live in another city or country––all through the ease of your computer in your home. The ability to use video chat will help you to feel as if the people you miss are just in the next room from you! Finally, but importantly, you will empower yourself to stay in touch and in control of the increasing expectations that citizens participate and respond using online facilities, from liking or complaining about a business to sending your opinions to consulting or rule-making authorities and even voting.

As you're learning, remind yourself how much the specific piece of technology will benefit your life. Technology is a tool for easier living, so be ready to take advantage of it.

There is nothing "magical" about technology. It is all understandable in plain terms and even programming is something you can learn using online courses if you find yourself fascinated by it. Do not let the "voodoo of new" put you off learning.

Technology can help you to keep track of many things in your life, from making inventories of home items (for storage, moving, insurance, etc. purposes) to meal plans. As an added bonus, all of this information will sit on your computer or other digital device, found with a simple search––no more rummaging around for your lists and plans!

Even if you don't get anything out of the experience, learning new things helps keep your brain sharp. Learning is never wasted.

Think about the disadvantages of not staying open to learning new technology.

If you're resistant to allowing someone to help you learn new technology, whether it's because of your pride or some other reason, it's important to try to let go of your resistance. One way you can do this is by picturing yourself struggling to figure out technology on your own and imagining how that would feel. There is never an age at which we ought to know how to learn everything on our own and there will always be a teacher willing to show the way, be it a grandchild, a community college lecturer or an online buddy. Set aside worries of feeling frustrated or embarrassed about having someone tell you how to do something you think you ought to already know how to do. Remember that many people love to help guide others to discover how to do something.

Find the right teacher.

Finding the right teacher is crucial to learning correctly, as it makes or breaks the experience. Your teacher should be someone who is more or less certified to teach you, as well as someone who has a personality that you find tolerable. It's better for you teacher not to be someone you have previous attachments with, like your son or your girlfriend or husband. They are inevitably either annoying or distracting, so find a teacher that you have no personal attachments for. Reach out to them as much as possible and try to get to know them a little–this might help you learn to like them and their teaching methods.

Research the options. If there is nobody within your circle of friends or family who seems appropriate to be the teacher, look at community college, night class or online options for learning. In some cases, it may be best to choose someone who doesn't know you, so that you don't feel shy or embarrassed about your lack of experience.

Don't be afraid to ask questions. Even Einstein asked questions, so don't be embarrassed. Often we don't want to ask a question, simply for the reason that it seems too simple, like we should already know it, but the fact is you're not helping yourself by holding back on asking the simple questions. Without understanding the entire system, even the simple parts, you will not be able to get the full experience of the technology. Even when things seem simple, everybody misses little things once in a while. Take a deep breath, tell yourself that it's not such a big deal, and ask your pressing question.

Be prepared to make mistakes and to find out what works best for you. Mistakes are an important way to learn the way that does work and while we're conditioned to avoid mistakes, this is unrealistic. In fact, a lot of technology works around "mistakes" by providing more than one way to reach the outcome you're after, in recognition that people have their own intuitive preferences for getting things done. A good example is the use of mouse or keyboard shortcuts to make things operate on a computer screen––some people prefer one way, others the other, but both work and hence, both are equally valid.

Explore the system on your own. Once you've got the basics down, try exploring the technology on your own with your new-found knowledge. This can help you see what is most useful to you specifically about the systems, and get you more interested in investing some time learning to properly use it at a new level. With the excitement of learning what you like about the technology on your own, you might find that you are more willing to learn about the rest of the system as well. When it comes to operating systems on computers and digital devices, ease of use is now the main feature. Be reassured that it's fairly hard for beginners to break anything in the virtual system of digital devices, so give things a go. Of course, it also doesn't hurt to learn early on how important it is to back up any of your virtual information, from photos to bank statements. You should also know that when you chose an easy-to-use OS such as Windows, you sacrifice power for usability, and if you choose a more complex OS, such as Linux, It is difficult to use, but offers greater functionality and more complex features.

Be patient. Not only with the technology, but also yourself. Learning the ins and outs of a new technology can be confusing, frustrating, and can take a long time. Be patient and learn to simply take a moment and take a deep breath if you get annoyed. Patience is key because without it you cannot sufficiently understand the technology, and your view and memory of the experience will always be negative in your mind and will turn you off from using the technology again on your own. Give yourself plenty of breaks to digest the information. Your brain tends to lay down new understandings when you're not actively working on the problem. Avoid focusing constantly on the learning but intersperse it with doing completely different things.Take it one day at a time. There is no need to learn it all at once, so be patient and learn one new thing per day. This ensures that you understand every concept.

Tips

Wonderful things you can do once you master new technology include: Learning a new language, meeting new friends, finding a great place to eat rated as recently as a few minutes ago, staying in touch with people who live far away from you, finding out breaking news without relying on TV, keeping a huge music collection, learn anything through online courses, pay your bills, run a shop from home, buy things from anywhere in the world, research anything, check out scams and avoid them, play games, store huge amounts of data, build a dust-free digital book collection, find a new love or companion, navigate your boat/hike/bike, find places quickly and easily, and much more!

Don't be afraid to fire your teacher if they're not the one for you. Even though it can be hard to fire someone, if you are not enjoying the experience of learning and feeling like you are doing well you should find a new teacher.

Eat something while you're learning. It's a great distraction from the frustration, and if you feel yourself about to say something rude to your teacher, which will happen at some point, you can stuff some more food in your mouth.

Learn from a person, not a book. This is extremely important, because a book cannot answer specific questions and help you out if you are confused. However, a book can work in tandem with live teaching. Also, if you're using online learning, look for courses with videos if possible and that provide some form of contact, either directly or through forums.

How to Go Forward

Click icon to add picture

Click icon to add picture

Click icon to add picture

Choosing a Language Determine your area of interest. You can start learning with any programming language

(though some are definitely "easier" than others), so you'll want to start by asking yourself what it is you want to accomplish by learning a programming language. This will help you determine what type of programming you should pursue, and provide you a good starting point. If you want to get into web development, you'll have a whole different set of languages that you'll need to learn as opposed to developing computer programs. Mobile app developing requires a different skillset than machine programming. All of these decisions will influence your direction.

Consider starting with a "simpler" language. Regardless of your decision, you may want to consider starting with one of the high-level, simpler languages. These languages are especially useful for beginners, as they teach basic concepts and thought processes that can apply to virtually any language. The two most popular languages in this category are Python and Ruby. These are both object-oriented

web application languages that use a very readable syntax. "Object-oriented" means that the language is built around the concepts of "objects", or collections of

data, and their manipulation. This is a concept that is used in many advanced programming languages such as C++, Java, Objective-C, and PHP.

Read through some basic tutorials for a variety of languages. If you're still not sure which language you should start learning, read through some tutorials for a few different languages. If one language makes a bit more sense than the others, try it out for a bit to see if it clicks. There are countless tutorials for every programming available online, including many on wikiHow: Python - A great starter language that is also quite powerful when you get familiar with it. Used for many web applications and even some games. Java - Used in countless types of programs, from games to web applications to ATM software. HTML - An essential starting place for any web developer. Having a handle on HTML is vital before

moving on to any other sort of web development. C - One of the older languages, C is still a powerful tool, and is the basis for the more modern C++,

C#, and Objective-C.

Starting Small

Learn the core concepts of the language. While the parts of this step that apply will vary depending on the language you choose, all programming languages have fundamental concepts that are essential to building useful programs. Learning and mastering these concepts early will make it easier to solve problems and create powerful and efficient code. Below are just some of the core concepts found in many different languages: Variables - A variable is a way to store and refer to changing pieces of data. Variables can be manipulated, and often have defined types such as "integers", "characters", and others, which determine the type of data that can be stored. When coding, variables typically have names that make them somewhat identifiable to a human reader. This makes it easier to understand how the variable interacts with the rest of the code.

Conditional Statements - A conditional statement is an action that is performed based on whether the statement is true or not. The most common form of a conditional statement is the "If-Then" statement. If the statement is true (e.g. x = 5) then one thing happens. If the statement is false (e.g. x != 5), then something else happens.

Functions or Subroutines - The actual name for this concept may be called something different depending on the language. It could also be "Procedure", a "Method", or a "Callable Unit". This is essentially a smaller program within a larger program. A function can be "called" by the program multiple times, allowing the programmer to efficiently create complex programs.

Data input - This is a broad concept that is used in nearly every language. it involves handling a user's input as well as storing that data. How that data is gathered depend on the type of program and the inputs available to the user (keyboard, file, etc.). This is closely linked to Output, which is how the result is returned to the user, be it displayed on the screen or delivered in a file.

Install any necessary software. Many programming languages require compilers, which are programs designed to translate the code into a language that the machine can understand. Other languages, such as Python, use an interpreter which can execute the programs instantly without compiling. Some languages have IDEs (Integrated Development Environment) which usually contain a code

editor, a compiler and/or interpreter, and a debugger. This allows the programmer to perform any necessary function in one place. IDEs may also contain visual representations of object hierarchies and directories.

There are a variety of code editors available online. These programs offer different ways of highlighting syntax and provide other developer-friendly tools.

Creating Your First Program

Focus on one concept at a time. One of the first programs taught for any language is the "Hello World" program. This is a very simple program that displays the text "Hello, World" (or some variation), on the screen. This program teaches first-time programmers the syntax to create a basic, functioning program, as well as how to handle displaying output. By changing the text, you can learn how basic data is handled by the program. Below are some wikiHow guides on creating a "Hello World" program in various languages:

Hello World in Python Hello World in Ruby Hello World in C Hello World in PHP Hello World in C# Hello World in Java

Learn through deconstruction of online examples. There are thousands of code examples online for virtually every programming languages. Use these examples to examine how various aspects of the language work and how different parts interact. Take bits and pieces from various examples to create your own programs.

Examine the syntax. The syntax is the way the language is written so that the compiler or interpreter can understand it. Each language has a unique syntax, though some elements may be shared across multiple languages. Learning the syntax is essential for learning how to program in the language, and is often what people think of when they think about computer programming. In reality, it is simply the foundation upon which more advanced concepts are built.

Experiment with changes. Make changes to your example programs and then test the result. By experimenting, you can learn what works and what doesn't much quicker than by reading a book or guide. Don't be afraid to break your program; learning to fix errors is a major part of any development process, and new things almost never work right the first time.

Practicing Regularly

Code daily. Mastering a programming language takes time above all else. Even a simpler language like Python, which may only take a day or two to understand the basic syntax, takes lots of time to become truly proficient at. Like any other skill, practice is the key to becoming more proficient. Try to spend at least some time each day coding, even if it's only for an hour between work and dinner.

Set goals for your programs. By setting attainable but challenging goals, you will be able to start solving problems and coming up with solutions. Try to think of a basic application, such as a calculator, and develop a way to make it. Use the syntax and concepts you've been learning and apply them to practical uses.

Talk with others and read other programs. There are lots of programming communities dedicated to specific languages or disciplines. Finding and participating in a community can do wonders for your learning. You will gain access to a variety of samples and tools that can aid you in your learning process. Reading other programmers' code can inspire you and help you grasp concepts that you haven't mastered yet.Check out programming forums and online communities for your language of choice. Make sure to participate and not just constantly ask questions. These communities are usually viewed as a place of collaboration and discussion and not simply Q&A. Feel free to ask for help, but be prepared to show your work and be open to trying different approaches.

Challenge yourself to keep it fun. Try to do things that you don't know how to do yet. Research ways to accomplish the task (or a similar one), and then try to implement that in your own program. Try to avoid being content with a program that "basically" works; do everything you can to make sure every aspect works flawlessly.

Start practicing debugging. When you're programming, you're invariably going to come across bugs. These are errors in the program, and can manifest virtually anywhere. Bugs can be harmless quirks in the program, or they can be major errors that keep the program from compiling or running. Hunting down and fixing these errors is a major process in the software development cycle, so get used to doing this early. As you experiment with changing basic programs, you're going to come across things that don't work. Figuring out how to take a different approach is one of the most valuable skills you can have as a programmer.

Comment all of your code. Nearly all programming languages have a "comment" function that allows you to include text that is not processed by the interpreter or compiler. This allows you to leave short, but clear, human-language explanations of what the code does. This will not only help you remember what your code does in a large program, it is an essential practice in a collaborative environment, as it allows others to understand what your code is doing.

Expanding Your Knowledge

Take a few training courses. Many universities, community colleges, and community centers offer programming classes and workshops that you can attend without having to enroll in the school. These can be great for new programmers, as you can get hands-on help from an experienced programmer, as well as network with other local programmers.

Buy or borrow a book. There are thousands of instructional books available for every conceivable programming language. While your knowledge should not come strictly from a book, they make great references and often contain a lot of good examples.

Study math and logic. Most programming involves basic arithmetic, but you may want to study more advanced concepts. This is especially important if you are developing complex simulations or other algorithm-heavy programs. For most day-to-day programming, you don't need much advanced math. Studying logic, especially computer logic, can help you understand how best to approach complex problem solving for more advanced programs.

Never stop programming. There is a popular theory that becoming an expert takes at least 10,000 hours of practice. While this is up for debate, the general principle remains true: mastery takes time and dedication. Don't expect to know everything overnight, but if you stay focused and continue to learn, you may very well end up an expert in your field

Learn another programming language. While you can certainly get by with mastering one language, many programmers help their chances of success in the field by learning multiple languages. Their second or third languages are usually complementary to their first one, allowing them to develop more complex and interesting programs. Once you have a good grasp on your first program, it may be time to start learning a new one.

You will likely find that learning your second language goes much quicker than the first. Many core concepts of programming carry over across languages, especially if the languages are closely related.

Applying Your Skills Enroll in a four year program. While not strictly necessary, a four year program at a college or

university can expose you to a variety of different languages, as well as help you network with professionals and other students. This method certainly isn't for everyone, and plenty of successful programmers never attended a four-year institution.

Create a portfolio. As you create programs and expand your knowledge, make sure that all of your best work is saved in a portfolio. You can show this portfolio to recruiters and interviewers as an example of the work you do. Make sure to include any work done on your own time, and ensure that you are allowed to include any work done with another company.

Do some freelance work. There is a very large freelance market for programmers, especially mobile app developers. Take on a few small freelance jobs to get a feel for how commercial programming works. Oftentimes you can use the freelance jobs to help build your portfolio and point to published work.

Develop your own freeware or commercial programs. You don't have to work for a company to make money programming. If you have the skills, you can develop software yourself and release it for purchase, either through your own website or through another marketplace. be prepared to be able to provide support for any software you release for commercial sale, as customers will expect their purchase to work. Freeware is a popular way to distribute small programs and utilities. The developer doesn't receive any money, but it's a great way to build name recognition and make yourself visible in the community.

Tips If you are interested in game programming, investigate Python, C++, and Java. Of the three, C+

+ is probably the best performer, Python by far the easiest to learn, and Java best able to run on Windows, Mac OS, and Linux without change.

Learn about Free software. Study the source code of the programs available at the Free software directory. Why re-invent the wheel when you can make it better? Just make sure you understand what you're programming.

For most people, programming something that interests them or that they can use is more interesting than textbook examples. Use a search engine to find out about projects that interest you.

When you learn something new, it is often helpful to implement it yourself and then tweak the design, predicting the results, to make sure you understand the concept.

Make use of up-to-date application programming interfaces and official reference materials available from the software publisher.

References are there to help you. Don't be ashamed if you don't remember everything by heart; that comes with time. The important thing is knowing where to find reference material.

For practice, try to teach others. It will not only make you more competent but let you think more deeply from different perspectives.

Cutting-edge programming languages

Erlang: Functional programming for real-time systems

Erlang began deep inside the spooky realms of telephone switches at Ericsson, the Swedish telco. When Ericsson programmers began bragging about its "nine 9s" performance, by delivering 99.9999999 percent of the data with Erlang, the developers outside Ericsson started taking notice.

Erlang’s secret is the functional paradigm. Most of the code is forced to operate in its own little world where it can't corrupt the rest of the system through side effects. The functions do all their work internally, running in little "processes" that act like sandboxes and only talk to each other through mail messages. You can't merely grab a pointer and make a quick change to the state anywhere in the stack. You have to stay inside the call hierarchy. It may require a bit more thought, but mistakes are less likely to propagate.

The model also makes it simpler for runtime code to determine what can run at the same time. With concurrency so easy to detect, the runtime scheduler can take advantage of the very low overhead in setting up and ripping down a process. Erlang fans like to brag about running 20 million "processes" at the same time on a Web server.

If you're building a real-time system with no room for dropped data, such as a billing system for a mobile phone switch, then check out Erlang.

Go: Simple and dynamic

Google wasn’t the first organization to survey the collection of languages, only to find them cluttered, complex, and often slow. In 2009, the company released its solution: a statically typed language that looks like C but includes background intelligence to save programmers from having to specify types and juggle malloc calls. With Go, programmers can have the terseness and structure of compiled C, along with the ease of using a dynamic script language.

While Sun and Apple followed a similar path in creating Java and Swift, respectively, Google made one significantly different decision with Go: The language’s creators wanted to keep Go "simple enough to hold in one programmer's head." Rob Pike, one of Go’s creators, famously told Ars Technica that "sometimes you can get more in the long run by taking things away." Thus, there are few zippy extras like generics, type inheritance, or assertions, only clean, simple blocks of if-then-else code manipulating strings, arrays, and hash tables.

The language is reportedly well-established inside of Google's vast empire and is gaining acceptance in other places where dynamic-language lovers of Python and Ruby can be coaxed into accepting some of the rigor that comes from a compiled language.

If you're a startup trying to catch Google's eye and need to build some server-side business logic, Go is a great place to start.

Groovy: Scripting goodness for Java

The Java world is surprisingly flexible. Say what you will about its belts-and-suspenders approach, like specifying the type for every variable, ending every line with a semicolon, and writing access methods for classes that simply return the value. But it looked at the dynamic languages gaining traction and built its own version that's tightly integrated with Java.

Groovy offers programmers the ability to toss aside all the humdrum conventions of brackets and semicolons, to write simpler programs that can leverage all that existing Java code. Everything runs on the JVM. Not only that, everything links tightly to Java JARs, so you can enjoy your existing code. The Groovy code runs like a dynamically typed scripting language with full access to the data in statically typed Java objects.

Groovy programmers think they have the best of both worlds. There's all of the immense power of the Java code base with all of the fun of using closures, operator overloading, and polymorphic iteration -- not to mention the simplicity of using the question mark to indicate a check for null pointers. It's so much simpler than typing another if-then statement to test nullity. Naturally, all of this flexibility tends to create as much logic with a tiny fraction of the keystrokes. Who can't love that?

Finally, all of the Java programmers who've envied the simplicity of dynamic languages can join the party without leaving the realm of Java.

OCaml: Complex data hierarchy juggler

Some programmers don't want to specify the types of their variables, and for them we've built the dynamic languages. Others enjoy the certainty of specifying whether a variable holds an integer, string, or maybe an object. For them, many of the compiled languages offer all the support they want.

Then there are those who dream of elaborate type hierarchies and even speak of creating "algebras" of types. They imagine lists and tables of heterogeneous types that are brought together to express complex, multileveled data extravaganzas. They speak of polymorphism, pattern-matching primitives, and data encapsulation. This is just the beginning of the complex, highly structured world of types, metatypes, and metametatypes they desire.

For them, there is OCaml, a serious effort by the programming language community to popularize many of the aforementioned ideas. There's object support, automatic memory management, and device portability. There are even OCaml apps available from \

Apple’s App Store. An ideal project for OCaml might be building a symbolic math website to teach

algebra

CoffeeScript: JavaScript made clean and simple

Technically, CoffeeScript isn't a language. It's a preprocessor that converts what you write into JavaScript. But it looks different because it's missing plenty of the punctuation. You might think it is Ruby or Python, though the guts behave like JavaScript.

CoffeeScript began when semicolon haters were forced to program in JavaScript because that was what Web browsers spoke. Changing the way the Web works would have been an insurmountable task, so they wrote their own preprocessor instead. The result? Programmers can write cleaner code and let CoffeeScript turn it back into the punctuation-heavy JavaScript Web browsers demand.

Missing semicolons are only the beginning. With CoffeeScript, you can create a variable without typing var. You can define a function without typing function or wrapping it in curly brackets. In fact, curly brackets are pretty much nonexistent in CoffeeScript. The code is so much more concise that it looks like a modernist building compared to a Gothic cathedral. This is why many of the newest JavaScript frameworks are often written in CoffeeScript and compiled.

Scala: Functional programming on the JVM If you need the code simplicity of object-oriented hierarchies for your project but love the functional paradigm, you

have several choices. If Java is your realm, Scala is the choice for you. Scala runs on the JVM, bringing all the clean design strictures of functional programming to the Java world by

delivering code that fits with the Java class specifications and links with other JAR files. If those other JAR files have side effects and other imperative nasty headaches, so be it. Your code will be clean.

The type mechanism is strongly static and the compiler does all the work to infer types. There's no distinction between primitive types and object types because Scala wants everything to descend from one ur-object call Any. The syntax is much simpler and cleaner than Java; Scala folks call it "low ceremony." You can leave your paragraph-long CamelCase variable names back in Java Land. 

Scala offers many of the features expected of functional languages, such as lazy evaluation, tail recursion, and immutable variables, but have been modified to work with the JVM. The basic metatypes or collection variables, like linked lists or hash tables, can be either mutable or immutable. Tail recursion works with simpler examples, but not with elaborate, mutually recursive examples. The ideas are all there, even if the implementation may be limited by the JVM. Then again, it also comes with all the ubiquity of the Java platform and the deep collection of existing Java code written by the open source community. That's not a bad trade-off for many practical problems.

If you must juggle the data in a thousand-processor cluster and have a pile of legacy Java code, Scala is a great solution.

Dart: JavaScript without the JavaScript

Being popular is not all it's cracked up to be. JavaScript may be used in more stacks than ever, but familiarity leads to contempt -- and contempt leads to people looking for replacements. Dart is a new programming language for Web browsers from Google.

Dart isn't much of a departure from the basic idea of JavaScript. It works in the background to animate all the DIVs and Web form objects that we see. The designers simply wanted to clean up the nastier, annoying parts of JavaScript while making it simpler. They couldn't depart too far from the underlying architecture because they wanted to compile Dart down to JavaScript to help speed adoption

The highlight may be the extra functions that fold in many de facto JavaScript libraries. You don't need JQuery or any of the other common libraries to modify some part of the HTML page. It's all there with a reasonably clean syntax. Also, more sophisticated data types and syntactic shorthand tricks will save a few keystrokes. Google is pushing hard by offering open source development tools for all of the major platforms.

If you are building a dynamic Web app and are tired of JavaScript, Dart offers a clean syntax for creating multiple dancing DIVs filled with data from various Web sources.

New Trends

1: Continuous integrationWhen you checked in code to a repository, there used to be enough time to catch your breath, have a cup of coffee, and maybe even go out to lunch. No more -- code repositories are now tightly linked to continuous build systems that recompile your code, scrutinize your architecture, initiate hundreds of tests, and start flagging every potential error in your work. You won't get five feet from your desk before your phone starts pinging you with new emails or text messages from the continuous build mechanism telling you what needs to be fixed. Back to work, slave, the continuous build machine has new tasks for you.

2: FrameworksStanding on the shoulders of giants by reusing the work of others may not be a new idea, but it seems like it's never been as dominant as it is today. Very little programming begins from scratch these days. The favored -- and some might argue, best -- approach is to grab the right framework, research the API, and start writing glue code to link together the parts of the API that make the most sense for the job. Web pages aren't built out of HTML or CSS anymore; the coding begins with Ext JS, ExpressJS, or some other collection of code that serves as a foundation.Sure, you could be pioneering and build everything from scratch, but that would be suicide. There's no way to catch up with all the work done by others. You're not a craftsman -- you're a framework-tweaker. If you're thinking of writing code yourself, stop and look for a framework that does it already.3: LibrariesA close cousin to the framework is the library, a collection of routines so ubiquitous that coders can no longer live without it. Is it possible to write code for the browser without using jQuery? Does anyone even remember there's a built-in function called GetElementByID? Nah, libraries like jQuery now rule every level of the stack. The Internet of things: What it is, where it's going The Internet of things is a big, confusing field waiting to explode. Get the scoop on this

4: APIsIn the old days, programmers worried about data structures. They would pack all their information into blocks of bytes, count the bytes one by one, then make sure the values were placed the right distance from the pointer. Now, thank goodness, the compiler does most of that for us.These days we work through a much more rigorous interface with a fancier name: an API. This is often on a completely different machine and may be run by a completely different company that is charging us for every call. Do you want a street address and a ZIP code turned into latitude and longitude? There's an API for that, and it costs a few slivers of a penny to find each answer.In most cases, the data doesn't need to be so tightly packed. The old game of counting bytes has been replaced by parse-able data structures such as JSON or XML. You need to make sure you have the right punctuation in the right spot, but luckily there's a library to handle that for you.libraries. If it runs on our test machine, it will almost certainly run on the server. Everything is bundled together, and most of the incompatibilities between our desktops and the server are gone.

5: Platform as a serviceWho builds their own website anymore? Instead, create an account on someone else's website and customize it. All it takes is a few fields in a Web form, and voilà, your new website does everything you wanted. It's like uploading a cat video to YouTube or bidding on a Pez dispenser on eBay.Of course, this is a bit of an overstatement. Many of the PaaS options today require a programmer's sophistication to know what to put in each Web form. Microsoft's Azure, for instance, wants you to put in a few JavaScript functions that characterize how the website should respond. Then Azure wraps them up with the right libraries and starts them running on Node.js.

6: BrowsersThere was once a time when people wrote software for desktops, software for servers, and software for devices, and it would all be different. Each had its own way of communicating with the user. Now everything goes through the browser. When I set up a local file server on my house to hold music, I go to a URL and work with a website. Widgets for Apple's desktop have been written in JavaScript and HTML for years. Many cross-platform mobile apps begin as HTML and JavaScript that's bundled with Apache Cordova.Sure, there are holdouts. The best games are still custom work that doesn't need a browser, but that's changing, as more and more JavaScript developers figure out how to write the screen canvas object. Angry Birds, for instance, will run in a browser window.

7: Application containersBuilding a server used to be hard work. The programmers would get their code running, then send a memo to the team of server curators who'd install the right software. Sometimes they got the right libraries and sometimes they didn't, but eventually we converged on something that worked.Now application containers like Docker allow us to push a button and ship off a container with all the right

8: Infrastructure as a serviceDid I mention the teams of server curators? Those guys were fun to hang out with at lunch or after work, but now they've been abstracted away into the cloud layer, working as they do in a data center across the globe for another company that fancies itself a leader in the world of cloud this or cloud that. Few programmers need to ask the infrastructure team to build them a new server for a new project. They simply log into a website, push a button, and get a machine running for them. It's so much easier, but these IaaS administration Web pages won't buy you a drink after work. Of course, that saves you from ever having to get the next round

9: Node.js and JavaScriptBefore some of you were born, Web servers spit out static HTML. Then someone figured out how to create dynamic servers that could interact with databases. Every team needed one person to program the database in SQL, one person to write the server code in PHP or Java, and one person to design the HTML templates. Once everyone fell in love with AJAX and JavaScript running on the client, the sites needed yet another person to speak that language.Now it's all done in JavaScript. The browser, of course, still speaks JavaScript, but so do the server layer (Node.js) and the database layer (MongoDB and CouchDB). Even the HTML is often specified with JavaScript code for a framework like Ext JS or jQueryMobile that generates the HTML at the client.

10: Secondary marketplacesIf you're building a game, you could hire your own artists to create a stunning set of models. You might even hire a few programmers to add visual effects to make the game look cool. Or you could go shopping at secondary marketplaces like the Unity Asset Store and buy up all the pieces you need. As I write this, there's a 33 percent markdown on the Tile A Dungeon Sewer Kit, "designed as a modular kit to build from small to large sewer game scenes." The sale will probably be over by you time you read this and the price will be back up to $45. Who needs developers or artists with prices so low?There are more and more effective marketplaces for plug-ins, extensions, libraries, and other add-ons. As with libraries and frameworks, here one doesn't program so much as go shopping for the right pieces.

11: Virtual machinesThe days of writing code for real chunks of silicon are largely gone. Much of the code written today runs on virtual machines that translate your instructions into something understood by the chip. The Java Virtual Machine, the C#/.Net Virtual Machine, and now JavaScript engines end up being the main target for code.The popularity of the VM is growing to absorb everything in the stack. In the past, if you wanted to create a new language, you would need to build the entire stack from pre-processor to register allocator. These days, new languages sit on top of the old virtual machines. Clojure, Scala, Jython, JRuby -- they're all piggybacking off Sun's (now part of Oracle) great work in building the VM.This same behavior is appearing in the browser world. Sure, you could create your own browser and language, or you could cross-compile it to be emulated in JavaScript. That's what the folks did when they built cleaned-up tools like CoffeeScript. If this isn't confusing enough, Google produced GWT (Google Web Toolkit) to convert Java to JavaScript.

12: Social media portalsIn the early days of the Internet, you would build your own website, cross your fingers, and hope people would find it. When they did, they simply had to remember your cool URL.Alas, more and more of the Web is being absorbed into big silos like Facebook and Salesforce. If you build your own website, you might turn it on and hear the sound of crickets because all of humanity is clicking away in Facebook or Salesforce.The solution, of course, is to build a Facebook or Salesforce app. They'll let you in and let you integrate with their platform to a point. But in the end, your app is an extra that could be limited or tossed aside with a wave of a hand. What choice do you have? You're either a lackey to the big portals or you're listening to crickets.

13: Devops toolsOnce upon a time, we installed software on a server -- singular. Now we rent servers en masse, requiring dozens, hundreds, or even thousands of machines, many of which need to be provisioned on demand, full of fresh software -- a job that can no longer be done effectively by hand.Enter the "devops" trend and underlying tools such as Chef and Puppet designed to maintain these servers for you. Push new software to the cloud and these tools handle the job of keeping all the computers running the same code. They automate what we used to do by hand for one machine.Some services such as Google App Engine already handle this internally. All you need to do is give it your app, and the provisioning is automatic. You don't even know what's going on in the background; you merely get a bill for the amount of CPU cycles consumed.

14: GitHub, SourceForge, and social code sharingCode-sharing sites may be the greatest contribution to the open source world. Before services like SourceForge came along, software was something you built on your own and shared on your own. If someone wanted a copy of the code, they came to you and you sent them a tar-ball if you felt like it.

Now code sharing is a social network. Sites like SourceForge and GitHub post all the code for everyone to see and update. They merge the process of maintaining, sharing, and commenting on the code in one easy-to-access place. You can read the code and suggest changes, all through one interface. Is it any wonder that many projects see tens or even hundreds of thousands of downloads each week? That would never be possible with the old model.

This model is now so dominant that most proprietary projects follow it. Sites like GitHub and BitBucket support themselves by selling nonpublic repositories that offer all the power of sharing, but within a limited permission group.

15: Performance monitoringIn the beginning, tracking the power of your code was simple. You printed out the time when the code began, then printed out the time when it ended. If you wanted to be fancy, you added a few extra calculations to do the subtraction for you.

That can't cut it any longer. Many of the problems don't occur on one machine. Adding a profiler to your code won't reveal the real bottleneck, which could be caused by some weird interconnection or a sluggish database. Modern tools track the network calls for the network of software as well as the performance of individual modules. This is the only way to understand what is going right and going wrong.

This is just one important way of how the model of programming is morphing from a single machine to a network of connected tools that may or may not play well together.

Predictions for the future of programming

1: GPUs will be the next CPUsRemember the days when people bragged about the CPU in their box? Now even the best CPUs rarely cost more than $200, while fancy graphics cards routinely cost $500, $600, or much more. Gamers love to brag about the power of their graphics cards, not their CPUs, and that's driving the market.The rest of the world is slowly catching on. More and more software uses the GPUs. True, some of these early forays are inherently graphical processes, like the work of Web browsers, but increasingly we're seeing applications that have nothing to do with drawing fancy pictures being rewritten to use the parallel architecture of GPUs. Physicists use them to study matter; chemists use them to study reactions; astronomers simulate the galaxy with graphics cards; biologists crunch statistics via GPUs for population studies. And for a while this year, I heated my office by using my GPU to mine bitcoins.Practices like these will only become more widespread. Soon better compilers will make it possible to write code and let the compiler detect when it can run effectively on the GPU. The academic tools can already do this at a limited level, but it will become more popular when it is easier for everyone to do so with any project.

2: Databases will perform increasingly sophisticated analysisOnce programmers ceded control of data to something called a "database," they stopped being "programmers" and started being "database users." This isn't a bad thing. After all, databases are engineered to be more efficient at handling data than anything a normal human programmer can create, especially under tight deadline. They're also (usually) very efficient at using RAM and juggling the memory hierarchy. Dumping numbers into a database and letting the database do its thing is more often than not the most intelligent solution to dealing with data, and it's going to get even more intelligent as the databases themselves get more intelligent with time.

3: JavaScript for everythingNo, JavaScript won't be the only language in the programming world, especially given the surprising number of ads for Cobol programmers still being filed, but it will certainly begin to seem that way. JavaScript is inescapable on the browser, which now dominates almost everything a client computer does. Now the server side is embracing it with tools like Node.js.JavaScript will assuredly become more dominant in other areas as well. Once the only way into a smartphone was to write code in the native language demanded by the manufacturer: Objective-C for the iPhone; Java for Android; C# for Microsoft. Now most mobile developers can get the performance they want out of HTML5 applications running in browserlike views. The result may not be as zippy as native code, but the JavaScript is good enough and portable to the Web, too.

4: Android on every deviceWhen the browser doesn't win, Android is close behind. Camera designers, threatened by cellphones with good lenses, started putting Android on cameras, so now you can run Instagram on a Nikon. Does that make Nikon a computer company now? Does it even matter?There are Android refrigerators, car stereos, watches, televisions, even headphones. Some complain that the UI is too complicated because it can do too much, but that's missing the point. The UI layer can always be simplified. If Android is running underneath, the platform will dominate.

5: The Internet of things -- more platforms than everOne side effect of Android (and Linux) colonizing the world is that more and more objects will be joining the Internet of things. Android on your refrigerator will mean the opportunity to write code for the refrigerator itself, whether it's an app for displaying kid art, some calorie-counting scold, or a recipe suggestion engine for what's left inside the ice box. Who knows?Of all the many new platforms to come, the most important will be the car. Navigation and shopping are just the beginning. When the autonomous cars roll out, there will be even more opportunities for developers to cash in on car location and information.

6: Open source will find new ways to squeeze usFor all of the success of open source stacks like Android, Ubuntu, or MySQL, there remains a sticky problem with finding the revenue to support development. There are plenty of good stories about how open source code has helped hackers, but there aren't very many examples of how companies built a relatively stable ecology that let the programmers buy health care or food.The vast majority of open source companies distribute what might better be called a demonstration version under an open source license. Then some kind of secret sauce is kept locked away to give the programmers something to bargain with. It's the way of the world. Why buy the cow if you can get the milk for free? The best open source projects will find a way to tighten the screws in a comfortable way without scaring away customers.

7: WordPress Web apps will aboundThe biggest mistake that the Obama administration made was trying to build its insurance exchange websites from scratch. No one does that any more. Why bother when you can add a plug-in to WordPress? If you're really picky, you could work with Joomla or Drupal. The point isn't really which platform, just the fact that there are fewer and fewer reasons to create your own Web apps because so much functionality is built into the dominant frameworks.The game gets even more interesting when you start hacking the code. WordPress has its own editor built into it, so you can do your development inside WordPress, too. There's no debugger, but you can get around that. If WordPress adds a nice database browser like PHPMyAdmin and provides a bit of basic debugging tools, development will really accelerate.

8: Plug-ins will replace full-fledged programsBasic Web apps aren't the only ones riding the power of code snippets that can be plugged into a bigger framework. Photoshop used to be the dominant engine for reworking images, in part because of the fertile world of plug-ins. Now the newer apps like MagicHour have made plug-ins even simpler. MagicHour users, for instance, can share filters just like they share photos. Most major platforms offer a good plug-in API, and the ones with the best have fertile ecologies filled with thousands of modules, libraries, and plug-ins.This burgeoning ecology for code means that programmers will write more snippets and fewer applications. The right bit of glue code can be a million times more powerful than a great, hand-built application with megabytes of binary file. A small snippet can leverage everything in the entire ecology. A big app must do everything on its own.The savvy programmers will learn to leverage this by creating plug-ins, not programs. They'll learn the APIs for the host systems and string together parts. Very few will ever build anything from scratch. We'll all be part of the emerging Borg.

9: Long live the command lineWhile it has become easier to click your way to a working app, a surprising amount of work is still done in text editors and terminal windows. So, contrary to what you might think, the command line will not be going away. In fact, more and more modern tools will work only with the command line.The fact is, command lines are too flexible and too universal to be supplanted. Pretty GUIs with clicky interfaces and drag-and-drop widgets may get attention, but the programmers keep reverting to text.Ease of scripting is at the center of the command lines' continual resurgence. While some companies such as Apple have decent tools for scripting GUIs, they've never been as flexible or as stackable as the command line. How many people write shell scripts for their Macs, and how many write AppleScripts?The command line will live on because it's simple and extensible. If you have a script, you can easily extend it and glue it into other scripts.

10: Dumbing it down will failFor the past 50 years, programmers have tried to make it easy for people to learn programming, and for 50 years they've succeeded -- but only at teaching the most basic tasks. Ninety-five percent of the world may be able to figure out if-then-else structures, but that's not the same thing as being a programmer.That won't prevent well-meaning folks from trying to dumb down programming even further so that everyone will be able to do it. Evangelists will sell big dreams of a world where everyone programs, and they'll wheedle big grants with claims that the only way country X can stay ahead of the game is if every citizen in X learns to program Ruby or their VCR.Alas, true programming means understanding the unseen numbers dancing around in the little box. It means understanding the conventions for creating software and for partitioning responsibility, so the software can run cleanly. Only a few brains seem to be able to handle this work, and it seems unlikely that the proportion of people with this ability will change markedly after 50-plus years of trying. Teaching everyone to grok if-then-else clauses is a nice idea, but it's not the same as creating more programmers.

11: Outsourcing and insourcing will remain deadlockedThis bold law of economics is mirrored by the prediction that low-end work will be replaced by automated tools, and the real jobs will be for those who understand the business.Both will continue to be true. Outsourcing teams will win jobs with low bids but be squeezed by new automated tools. One set of websites makes it easy to hire low-wage workers across the globe. Another set of sites is making it easier and easier to go from 0 to 60 without hiring teams of people. Squads that depend on outsourcing contracts will find themselves bidding against internal teams of people who know the business and don't need help.

12: Management will continue to misunderstand coders and codingOne of the most painful conversations is listening to nonprogrammers in suits make requests. They saw Facebook or eBay or some cool demo site do something slick, and now they want you to move that button over a smidge. While you're at it, make it behave just like that cool example. Sometimes these requests work out, but often they end in frustration, as the suits don't get what they want.The typical response is to try to hire a 22-year-old graduate from Stanford. No other school will do. A 23-year-old is already over the hill and probably thinking about life outside of the office. The 22-year-old will be able to apply the bazillion hours to add that sheen of coolness to the CSS.The suits could spend the years learning the technology, but it's simpler to bid up a few youngsters. Their inability to understand the basic technology is one of the biggest reasons for age discrimination. The only solution that comes to mind is to search for some unicorn programmer. No 30-year-olds or non-Stanford grads need apply.The companies that get beyond the dreams and find a way to harness the talents of everyone else are the ones that will be the ones who find success. They'll find a way to work at a sane pace to create stable software that offers just enough features to be useful