How To Master a Programming Language II

So you’ve chosen a programming language that you want to learn, where do you start?

Learn the Environment

Depending on the type of language that you have chosen (interpreted vs. compiled) there may be several options available to you in choosing an editor or Integrated Development Environment (IDE).

Editors

Most programming languages can be written in your editor of choice. The preferred editor will include at a minimum syntax highlighting.

Some Text Editors Supporting Syntax Highlighting

Integrated Development Environment

If you want a full-featured editor, you may consider choosing an Integrated Development Environment (IDE). IDEs will provide an interactive debugger, advanced syntax checking, integration with software configuration management (SCM) systems, etc. Sometimes learning all the features of the IDE is just a big of a task as learning a language.

Some Integrated Development Environments

Resolve Dependencies

Depending on the language you are learning, there may be additional dependencies that your development environment requires. Whether you are using an IDE or text editor you need to have the language interpreter or compiler installed (or else you won’t get very far).

Also, if you are developing web applications, you will need to have a web server or web application server installed and configured.

Most IDEs will resolve these dependencies for you – however, you may also consider using a all-in-one local server environment.

Basic Programming Tasks

After your programming environment is setup correctly (you may need to make some additional tweaks along the way), work through a “Hello World!” problem in the language of your choice. Make sure you can do the following:

  • Check for Errors in Syntax
  • Compile via GUI and Command Line (if your language supports this)
  • Run your Program

At this point you should have basic command of your environment. As you work with it and get deeper into your language, you will become more familiar with the different features and options available to you.

2

How To Master a Programming Language

With the start of a new year, as a programmer have you made a resolution or goal to learn a new programming language?

For the next few days, I will be writing a series of posts titled How to Master a Programming Language, where I will be walking you through the steps that you need to take to learn the ins and outs of a programming language.

If you really want to master a new programming language, you have to do more than just read these posts — you need to take action!

Think about what you have done previously when learning a language. Is there anything you have done differently that has helped you learn a language? Please feel free to share your experiences in the comments.

Read the series of posts here:

5

More Programming Books Recommended By Readers

Due the overwhelming success of one of my previous posts: 6 Books Every Programmer Should Own, I wanted to compile a list of books suggested by readers.

These books are programming-language neutral and are an effective tool to writing succinct code.

Clean Code: A Handbook of Agile Software Craftsmanship

Robert C. Martin

This book covers the best practices, case studies and first hand experiences with creating “clean” code.

Recommended by: Squirrel Hacker, Noroctal Labs and kodeninja


Refactoring: Improving the Design of Existing Code

Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts

This book covers the best practices in modifying existing code.

Recommended by: kodeninja


How To Design Programs: An Introduction to Programming and Computing

Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi

This book is geared to the beginning programmer and focuses on the design and creation of programs.

Recommended by: Dave


Structure and Interpretation of Computer Programs

Harold Abelson, Gerald Jay Sussman, Julie Sussman

Picking up where How To Design Programs left off, this book explores ways to look at code from an object-oriented point of view.

Recommended by: Dave


If you were the original commenter, please contact me and I will provide a backlink to your website or blog.

0

Get Hired By Solving Programming Puzzles

When it comes to down to it practice makes perfect. In order to become a successful programmer you need to keep your skills up-to-date and work on problems outside of those faced at work.

Luckily, there are numerous websites that provide the opportunity to practice. The following blogs comprehensively list most of the puzzle websites that are available to help you practice your skills.

There is one other website that is absent from the lists above that provides programming puzzles.

ITA

ITA Software is a company based out of Cambridge, MA that specializes in the development of airline and travel software. They use programming puzzles to attract and recruit new employees.

They won’t grade your solution if aren’t considering working for them, but that doesn’t mean that you can’t at least try implementing a solution. The puzzles are designed for those looking for a challenge.

If you are ready for the challenge, ITA has two sets of puzzles:

If you have attempted these problems or have been hired as a result of completing one of the problems, please share your experiences.

2
5 Common-Sense Ways to Remain Productive

5 Common-Sense Ways to Remain Productive

After reading several books (6 Books Every Programmer Should Own) for programmers on increasing productivity, you start to realize that a lot of it is common sense.

You even to notice a common theme amongst blogs about productivity.

Whether you are a programmer or not, here are 5 common-sense ways to remain productive:

1. Ignore Distractions

Whatever is keeping you from doing your work: e-mail, instant message, phone calls, loud co-workers, etc.

Find a way to stop these things from disturbing you:

  • close e-mail and instant message applications
  • put your phone on Do Not Disturb (DND)
  • wear headphones (you don’t need to listen to music)
  • move to another location to work

2. Organize

Look around at your desk. Are there papers thrown everywhere, food, or other junk laying around?

How about your desktop on your computer? Do you have 100 icons that you don’t know what half of them do?

Keeping items in a easy to reach location makes sense if you use them frequently, but having too many items defeats the purpose.

Start organizing both our physical paper and computer files in a logical location. Only keep those that you use very frequently out in the open.

3. Record Your Thoughts

Have you ever had a great idea or thought come to mind, but you didn’t have anywhere to record it?

With the technology that is available today, you should have no excuse. Most cell phones will have some of voice memo application that you can use. If not, you can purchase an inexpensive audio recorder (similar to Norm MacDonald “Note to Self”).

If you are old school, you can even carry with you a small notebook and a pen or pencil.

Have you found yourself in a meeting where you scribbled a bunch of information on a whiteboard?

I would still recommend recopying your notes to paper or computer, but before you erase the board make sure you take a picture with a digital camera or your camera phone – you never know when you might need to refer to it.

4. Whiteboard Long-Term Goals

It’s easy to feel overwhelmed when you think of things that you need to do over the long-term (over 1 week deadline).

Don’t stress yourself our by constantly saying to yourself “I’ve got a ton of things to do.” Get a whiteboard at work and/or home and start to write down your long-term goals. Things always seem much more manageable once you write them down.

You can even use different color markers to indicate priority (e.g. Red-High, Green-Low).

5. Daily Task List

Similar to having whiteboard for long-term goals, start writing down your short-term goals (less than 1 week deadline) on a piece of paper or post-it note – keep it next to you.

Over the week as you accomplish tasks, cross them out!

The sense of accomplishment that you feel by completing goals will motivate you complete the others.

None of these items are products of intense scientific research or even that expensive to implement – just common sense.

0

What Programmers Can Learn From Salespeople

Stans Used Ships

Screenshot courtesy of: The Secret of Monkey Islandâ„¢

What comes to mind when you hear the terms: ‘Salesman’, ‘Salesperson’ or ‘Sales’ ?

  • High-Pressure
  • Negotiation
  • Cold-calling
  • Telemarketing
  • Spam

If these are the type of words that come to mind, you have probably been dealing with some bad salespeople.

What is Sales?

I do not work nor have I ever worked in sales, but I have taken sales classes offered by my employer.

If there was one thing I learned about sales, it’s that the sales process is more about having a conversation than it is about buying or selling something.

How does this relate to programming?

Before you see how to this relates to programming, you must be able to think like someone who is motivated more by helping people rather than by money.

The Financial Planner

The scenario to understanding genuine salespeople is to look at a financial planners. If you are unaware of what financial planners do – they advise individuals in making major financial decisions such as retirement, taxes, investing, etc.

When you visit a financial planner, you could tell him or her that you want to retire by age 50 and you want to invest $100 per month. Without any further discussion, a financial planner could come up with a solution for your retirement, but is it going to be the best solution?

The Programmer

Any good programmer can take requirements and a design and develop a solution that meets the needs that are laid out. But is this what the end-user really wanted?

What if you actually sat down with the end-user and had a conversation with him or her rather than rely on some specs that a business analyst obtained?

You might be thinking to yourself, isn’t that the job of the business analyst? In an ideal world it would be, but like the Game of Telephone (or Chinese Whispers) something is going to get lost in translation going from end-user -> Business Analyst -> Programmer.

If you have the opportunity to have a conversation with the end-user, take it. Establish a relationship, listen to them to find out what they really need, negotiate possible solutions and close by building them a solution.

Listen Carefully

The most important part about sales and also with programming is: listening.

Don’t be the used-car salesperson who wants to sell the heap of junk on the lot, without understanding the true needs of the customer.

0

Fat or Thin? The Future of Web Clients

1260621948_Apple iPhone

No, I’m not talking about the millions of people who use the web, but rather they way that we access web content.

Thin

What do I mean by thin? I mean accessing and interacting with web information by the means of a single application: the web browser.

If you haven’t seen Google’s ChromeOS yet, it is the epitome of a thin client. It is like a stripped down Linux distribution with nothing more than a web browser.

When web 2.0 first introduced itself, we saw web sites that behaved like desktop applications. Technologies like AJAX and Flash combined with broadband internet changed the way we interacted with the web – the web browser was the primary application for accessing web content.

Web applications still had a few major flaws: the capabilities of the browser to adhere to web standards (HTML & CSS).

Who had an iPhone the first year they came out? If you did, you might remember that if you wanted to access sites like Facebook or MySpace (who uses MySpace anymore?), or if you wanted to play any games, you needed to do so with Safari.

That first year, the iPhone also teased us with some built-in applications like YouTube and Google Maps.

Web applications have been successful due to the convergence of web standards: XHTML and CSS, but are still dependent on the speed of the network and the capabilities of the browser.

Thick

Today, how often do you use the web browser on your iPhone?

There are over 100,000 custom iPhone applications that provide different ways to access web content. As a result, web clients are getting fatter and fatter.

Why apps?

Accessing web content via apps is a more pleasant user experience because we are relying more on the capabilities of the device operating system vs. the capabilities of the web browser.

How many of you access your e-mail through a mail application or read blogs with an RSS reader, or use Twitter through a desktop client?

Internet-enabled applications are not unique to mobile devices nor are they anything new.

Your web browsers isn’t as thin as it used to be

All of the primary browsers today support the use of extensions or toolbar add-ons to enhance your browsing experience. As a result, our web browsers are also getting fatter.

The Future

Our mobile devices are now loaded with applications for accessing web content: FAT, at the same time netbooks are becoming increasingly popular: THIN.

So where are we headed?

I believe that the application-based client will be the future of the web because it allows for the best user experience. The traditional web browser won’t go away, but will continue to supplement the application.

Because of the difficultly involved in maintaining software updates and new features – the success of web-enabled application will depend on the update delivery model. Applications will thrive if using push-notification models for updating like Apple’s App Store and Firefox’s Add-On manager.

What do you think? Will Google’s ChromeOS eventually have it’s own app store like the Android Market? Or will all future browsers adhere to the same web standards offering the same browsing experience?

0

How To Network With Other Programmers On Twitter

Twitter
I came across two blog posts today by @eriwen about why Twitter is a useful Social Networking tool for programmers:

Starting Off With Twitter

When I first heard about Twitter, I thought – that sounds stupid, who cares about what I am doing?

I am relatively new to Twitter and after using it for about a year, am just now starting to appreciate its value.

Initially, my tweets looked like Facebook status updates:

Going to the airport

Going to the beach

Out to lunch

Unless you’re my mother, you could probably care less about what I do with my free time.

Putting Twitter Into Perspective

Imagine if you were networking at a real (in person) social event like a programming user group meeting, wouldn’t you be more interested in programming discussions rather than discussions about my personal life? So why should Twitter be any different?

As a programmer, I am interested in hearing about programming methodology, news articles and other interesting topics surrounding technology.

If you were to find someone with similar interests, you are more likely to start a dialog and establish a true networking connection.

Finding Similar Interests

The biggest challenge that I’ve faced with using Twitter, is finding worthwhile people follow. You could follow a programmer who is somewhat famous like:

But, unless you are about as famous as them, your tweets will probably be one-sided.

So where can you find programmers who share a similar social status as you?

JustTweetIt

JustTweetIt is a Twitter directory where you can find other users who share similar interests. You can browse different Twitter profiles within each category or you can add your own to as many different categories as you like.

wefollow

Wefollow is another Twitter directory, where you can search based on different tags. Wefollow allows you to also add your own Twitter user based on an series of tags that you specify.

Blogs

More and more programmers with blogs are sharing their Twitter usernames on their blogs. I welcome you to connect with me, if you find me interesting:
@dhirschl.

Where do you find people to follow?

1
Do Something Else Besides Programming!

Do Something Else Besides Programming!

There occasionally comes a time when you can’t sit in front of the computer any more and need to focus your energy on something else.

When you are stuck trying to debug some logic – the cure to working through your problems is to do something unrelated to programming.

Sports

I like to play a round of golf every now and then, even though I am not particularly good at it. Participating in sports not only takes my mind off programming, but forces me not to think about anything at all.

When playing golf, I tend to do a lot better when I am not focusing on hitting the ball or worrying about players behind me. By not thinking, I am ignoring self-doubt and what-ifs (what if I hit the ball too hard or what if I miss the ball entirely).

Sports can be relaxing if they played non-competitively.

Clubs & Organizations

I’ve written previously about being a member of Toastmasters. By belonging to an organization that promotes professional growth, you can work on skills to make you a more confident person and encourage you to become a leader.

The organization that you choose to belong to can really be anything: martial arts, a social club, etc. Just make sure it is something that piques your interest and makes you want to participate.

Relax

Sometimes doing nothing is the best way to take your mind off things. What’s doing nothing? Anything that doesn’t require you to think critically.

The purpose of doing nothing is to get lost in a book (fiction preferably) or watching a movie or TV show.

I like to look at movies and books as a way to take a break from my life and immerse myself in someone else’s story.

Break Out of the Bubble

Most professional programmers will program for fun in their free time. While I support this behavior 100%, I believe that programmers need to sometimes break out of the programming bubble and focus their attention on something unrelated.

Besides programming what do you do?

1

10 More Ways To Get An Article On DZone

DZone Logo

I was introduced to DZone not too long ago and it has now become my #1 resource for reading about the latest programming news.

I noticed a trend of the types of websites that are submitted to DZone and after reading 10 Ways to get an Article on DZone, I thought I would expand upon this and add 10 more ways to get an Article on DZone.

10. Interviewing Stories with Google

Everybody (including myself) probably wants to work for Google given the numerous benefits their employees enjoy. Does reading about the interview process provide a way to beat the system by knowing what to expect?

Sample Submissions:

9. Cartoons that Appeal to Geek Humor

You can’t take life too seriously and not everything you read should be either. The funniest cartoon will be one that leaves non-programmers saying “I don’t get it.”

Sample Submissions:

8. Cheat Sheets & Reference Guides

When you don’t feel like looking through documentation or Googling for a particular solution, cheat sheets and reference guides are a useful tool.

Sample Submissions:

7. Stories about Java

DZone has a large Java following courtesy of JavaLobby.org. Although more and more developers of other languages are using DZone, Java stories tend to carry some weight.

Sample Submissions:

6. Free Books

Yes, free as in beer. Programming books aren’t cheap and it is great when you can find a free alternative.

Sample Submissions:

5. Stories about DZone

Heavy users of DZone are quick to point out DZone’s flaws and offer suggestions for improvement. I’m sure DZone also appreciates the feedback.

Sample Submissions:

4. Good and Bad Programmers

Like bad singers on American Idol, bad programmers apparently cannot tell for themselves that they shouldn’t be programming.

Sample Submissions:

3. Version Control Systems

Requirements are never static and it only takes one time that you need to rollback changes on your code.

Sample Submissions:

2. Programming Life

Programmers want to know what others are up to in the field, particularly how to grow professionally and what mistakes to avoid.

Sample Submissions:

1. Ask Questions

Social networking tends to attract the following people: those who have a lot to say and those who want to say more. Is there a better way to bring these two groups together?

Sample Submissions:

Update (12/11/2009): Added links to original content.

1