Four tips for learning how to program by Jamis -37Signals.com

1. Pick a Project

First, I start with a project in mind. When I was first learning Ruby, my “learner” project was a miniature HTTP server. For iOS, it was a string figure catalog. For CoffeeScript, I wanted to write some interactive demonstrations of maze generation algorithms. The actual choice of project is unimportant; all that matters is that it be something that I find interesting, and which I don’t immediately know how to do.

It may often be the case that the choice of project is what initially spurred the desire to learn. Maybe you have a web app you want and so you figure you might use it as a chance to learn Rails. Or you wish you had an app on your iPhone, which spurs you to learn iOS development.

But whatever is spurring your desire to learn to program, don’t try to learn it academically. The project is what takes the musty, dusty facts and makes them real. Without the project, you aren’t learning, you’re simply giving yourself a passing acquaintance with some information.

2. Do What you Can

Second, I write as much of it as I can, using the resources available to me. If I’m learning a new programming language, the resources probably include an online syntax reference. If it’s a new framework (like Cocoa, or Rails), I’ll be looking at references for the framework. (Personally, I prefer online references, since they are easily searchable and bookmarkable, but if books are your thing, use what works.) The going is usually very slow at this phase, with lots of false starts and backtracking as I learn what works and what doesn’t. You’d think this would be a discouraging phase, but I actually find this to be the most exhilarating of the steps. It’s all about discovery and exploration.

During this second phase, I also make heavy use of resources like Stack Overflow. I don’t think I’ve ever asked a question on that site, but when I was learning iOS programming, I learned a bunch from the questions other people had asked there, and the answers they got. Similarly, looking at other (open-source) projects on GitHub and elsewhere can help me see how more experienced programmers solved similar problems. The key, though, is to make sure I understand those solutions before I adopt them myself; if I just blindly apply their code, I’m not learning, I’m copying. I’ll never do myself any favors by taking shortcuts I don’t understand.

Note what I intentionally did not mention: posting to mailing lists or forums orIRC and asking for help. I’ve found that these are not so useful to me. For one, unless my question is very specific, the forum or list will rarely have useful responses. For another, if I do have a specific question, I may still have to wait a day or two for a relevant response, and in my experience I’ve often solved the problem already by that time. Which again casts doubt on the usefulness of those forums. Remember that you are almost certainly not the first person in the world to have the particular problem you are encountering: the list or forum has almost certainly seen the question before. Instead of asking, take the time to look for the answer. Only when all else fails should you consider actively asking for help.

3. Divide and Conquer

Third, if the problem I’m tackling is large, I try to break it into small bits first. When I was writing the first version of Net::SSH for Ruby, I was overwhelmed by the complexity of the SSH specification. Instead of trying to write an entire client ex nihilo, I started with a bunch of much simpler scripts that helped me explore the domain and learn it in chunks. For instance, I had a script that just tested connecting to an SSH server, another that went further and negotiated the encryption algorithms to use, and another that went further yet and opened an SSH channel on the connection.

As others will no doubt mention, this is where TDD really shines. It forces you to take the problem apart and think of it in the most atomic pieces. When I was learning how to tessellate a plane using Wythoff constructions, I foundTDD invaluable. I wrote Kaleidoscope almost entirely test-first, and came out the other side with a good idea of how Wythoff constructions work.

When the problem you’re facing has you stumped, see if you can break it into smaller problems that can be solved separately. You may find that the larger problem solves itself in the process.

4. Ask for Feedback

Fourth, I try to post what I’ve learned somewhere, on a blog, a mailing list,IRC, a static web-page, somewhere visible, and ask for feedback. I’ve not done this as consistently as I should have, but when I have, I’ve learned a lot. Several months ago I was learning CoffeeScript and I asked Sam Stephenson to review my code (an implementation of a maze generator). He pointed out a lot of places where my code could be more idiomatic. That was invaluable.

The most important thing to keep in mind is that learning how to program (or how to do anything at all, really) is not going to be an overnight task. Do not be tricked into thinking it will be easy. But just because it isn’t easy doesn’t mean it can’t be enjoyable! Decide it’s worth it, and it will be. In the end, the more you learn, the more you are empowered to accomplish.

Advertisements

Learning new Programming Language

Having seen the so much talk about Rail framework ,I had decided to learn Ruby on Rails. I’ve found excellent book on Rails, published by Sitepoint.

I’ve spent 2 weeks to complete everything to learn in Rails and i felt very proud as I’ve added another language in my resume. So i though of writing simple project. I couldn’t think about any kick ass application myself. so I decided to model exactly like some online application and I’ve choosed TadaList by 37Signals.com.

I started by implementing “login” functionality  and it didn’t work. I’ve copied the code in online here and there and pasted and try to run.. Nothing worked. Then, I realized learning by learning is not a learning it is just adding some information. I realized , I can only learn better by doing.

Lession Learned

Without doing any action or any project, I can’t learning anything. Programming also same as Swimming and I can’t learn programming without doing program.

Todo:

Instead of adding more information, I write program and project. Instead of reading more blog,twitter, facebook, I should write blog about the information which I know very well.

My Programming Technique:

Once I have basic knowledge about the programming or technology, find any simple project or website in online and try to simulate the same with the language I ‘ve learned . By doing this , though I am not creating remarkable application , i can learn something about the programming language. After the code is ready to use, I can add or reduced some functionality to make unique application.

Learning model

1, Music model

In the Classical tradition, a musician knows what he or she is going to play; the music is writtendown. What seperates the greats from the rest is how well they perform that music.

For speach improvement, watch a presentation that you consider especially well done and make notes of its various points; later, after you’ve forgotten most of it, use your notes to createa talk making the same points. ​

​2, Chess Model

Excellent chess players practice by studying positions from real games between top-levelprayers, organized by various themes – openings, end-games, attacks , defenses, andmanyother categories that are far more refined.

Case Method/Model Pioneered b hardword business school. You’re presented with aproblem,and your job is figure out a solution.

Don’t jsut read the news, imagine how it might affect the business you’re in or want to be in,andanswer the question: What would you do? then comes a critically imporent step: Write youranswer down and keep it .

3, Sports Model

two large categories:

: One is conditioning, building the strength and capacities that are most useful in a given sport. Tennis players work on stamina so they can still get the ball three hours into the match

The other category of practice is working on specific critical skills.- Batting a baseball, throwing afootball, hitting a golf ball ou tof the sand.

In my field, as a software programmer, Design patter, software engineering are the condittionaling.  Doing program in Java is special skills.

specific skill development, how to develop IPhone, ANDROID applicaiton.

Keep Learning

The first step is to start -Jason

Many people ask me, “How can I get started in web design?” or, “What skills do I need to start making web applications?” While it would be easy to recommend stacks of books, and dozens of articles with 55 tips for being 115% better than the next guy, the truth is that you don’t need learn anything new in order to begin. The most important thing is simply to start.

Start making something. If you want to learn web design, make a website. Want to be an entreprenuer and start a business selling web based products? Make an app. Maybe you don’t have the skills yet, but why worry about that? You probably don’t even know what skills you need

Start with What already you know

If you want to build something on the web, don’t worry about learning HTML, CSS, Ruby, PHP, SQL, etc. They might be necessary for a finished product, but you don’t need any of them to start. Why not mock-up your app idea in Keynote or Powerpoint? Draw boxes for form fields, write copy, link this page to that page. You can make a pretty robust interactive prototype right there with software you already know. Not computer saavy? Start with pencil and paper or Post-it Notes. Draw the screens, tape them to the wall, and see how it flows

You can do a lot of the work with simple sketches or slides. You’ll be able to see your idea take form and begin to evaluate whether or not it really is something special. It’s at that point you can take the next step, which might be learning enough HTML to take your prototype into the browser. The point is, go as far as you can with the skills and tools that you have.

Avoid Self Doubt

Many times the reasons we don’t start something have nothing to do with lack of skills, materials, or facilities. The real blockers are self-criticism and excuses. In the excellent book, Drawing on the Right Side of the Brain, the author, Betty Edwards, discusses how we all draw as kids but around adolescence, many of us stop developing that ability.

“The beginning of adolescence seems to mark the abrupt end of artistic development in terms of drawing skills for many adults. As children, they confronted an artisitc crisis, a conflict between their increasingly complex perceptions of the world around them and their current level of art skill.

At that age kids become increasingly self-critical and equally interested in drawing realistically. When they fail to draw as well as they know is possible many give up drawing at all.

This feeling continues into adulthood. We want to design a website or build an application but if our own toolset doesn’t match up to the perceived skillset we never start. It doesn’t help that the internet gives us nearly limitless exposure to amazing work, talented individuals, and excellent execution. It’s easy to feel inadequate when you compare yourself to the very best, but even they weren’t born with those skills and they wouldn’t have them if they never started.

Do- There is no Try

People who succeed somehow find a way to keep working despite the self-doubt.  The artist, Vincent Van Gogh was only an artist for the last ten years of his life. We all know him for masterful works of art, but he didn’t start out as a master. Compare these examples from Drawing on the Right Side of the Brainshowing an early drawing compared to one completed two years later:

He wasn’t some child prodigy (he was 27 when he started painting), he learned his craft by hard work. If he’d listened to his own self doubt or despaired that his skills didn’t compare to Paul Gauguin’s it’s likely he never would have even tried.

This is all to say that there are many things that can get in the way of the things we should be creating. To never follow a dream because you don’t think you’re good enough or don’t have the skills, or knowledge, or experience is a waste. In fact, these projects where there is doubt are the ones to pursue. They offer the greatest challenge and the greatest rewards. Why bother doing something you already have done a hundred times, where there is nothing left to learn? Don’t worry about what you need to know in order to finish a project, you already have everything you need to start.

Success

Learn by doing and trying, not by thinking. Aimless reflection and introspection are bottomless pits that can suck up enormous amount of time that could be put to far more productive uses. If you have a choice between reading a book on a programming language and going through a tutorial that forces you to try examples, go through the tutorial. Immediate, tactile learning is better than abstract success stories which paper over important ingredients for success.

Social networking is key. Grow by connecting yourself to communities of peers, mentors, gurus, etc that you can actually rely on and that you can benefit from. If HN is making you depressed, stop reading it. Instead establish meaningful professional and personal connections with people that are supportive. The value of your circle is often overlooked. I am a firm believer that the quality of the people you know is the great predictor of your overall happiness and achievement.

Focus on the things you need to know. The number of programming languages you know doesn’t matter. It is a meaningless metric. What matters is how comfortable you are with the tools that help you get your job done. This is related to point 1). Having mastery and proficiency of something that you use daily is far more important than having the breadth of knowledge and mastery of exotic languages.

Stack your skills. Time is short so the best way to advance is to leverage maximum of what you already know. In other words, don’t jump around and shift gears all the time. Think of a long term goal(s) and try to segment the path toward that goal such that you can (a) complete each segment without getting distracted, (b) get feedback after each segment (c) learn something in each segment that you can use in the next. It doesn’t have to be one project. In fact it’s better if a sequence of projects, so you can adjust your course along the way.

Don’t stop. Giving up is an attractive option. Our society has many different ways to cushion your fall, which can make quitting tempting and virtually painless. If you want to achieve something, idleness is definitely not OK.

Rule-of-thumbs

I have some easy rule-of-thumbs to follow

  1. whatever excites you, go do it
  2. whatever scares you, go do it
  3. every time you’re making a choice, one choice is the safe/comfortable choice – and one choice is the risky/uncomfortable choice. the risky/uncomfortable choice is the one that will teach you the most and make you grow the most, so that’s the one you should choose.

The Philosophy of Time Management

time perspective– period of time that you take into consideration when making your day-to-day decisions and planning your life. successful people were those who had a long time perspective

There is a rule that says, ‘‘Long time perspective improves short-term decision making.’’
The long view sharpens the short view.In your life, think as if you were on a long hike climbing a mountain. Stop regularly and look up at the summit, your eventual goal, and then adjust your footsteps to ensure that every step is still taking you in that direction.

Get a wristwatch with an alarm that beeps every fifteen minutes. Each time the alarm sounds, stop and observe yourself. Look at what you are doing at that moment. If possible, keep a time log and make a note of what you are doing each time the alarm rings. Ask yourself regularly, ‘‘Is what I am doing right now making the very best use of my time?’’

story;;

 It was about a woman who had come from a limited family background and only finished high school. Her first job was as a nurse’s aide. But she was both ambitious and determined. By working hard and studying evenings and weekends, she eventually became a registered nurse. She took additional courses, and she was promoted. Eventually, she became a head nurse in her hospital. Meanwhile, she married and had two children.

When she was forty years old, it dawned on her that she could be a doctor, if she put her mind to it. Her exposure to other doctors had convinced her that they were no smarter than she was. She sat down with her family and told them of her dream. Her husband and teenage children supported her completely. From that day forward, they took care of all the family work responsibilities so that she could return to school, complete the necessary courses, and become a doctor.

At age 48, she graduated with honors with a degree in pediatric-medicine. By the time she was age 50, she was established in a medical practice working with children. She was deriving more joy and satisfaction out of her life and work than she ever thought possible.

==

There is a basic rule in human relationships. It is that ‘‘people don’t change.’’ Both you and every person you meet are products of their entire lives.

Ask yourself, ‘‘Is what I am doing right now the sort of work that pays $25 an hour or more?’’ If it is not, discipline yourself to stop doing it. Discipline yourself to only do work that pays what you really want to earn.

See Yourself as a Role Model

In developing your philosophy of time and life management, see yourself as a role model for others. Discipline yourself to set a positive example of personal efficiency for your staff, your coworkers, and your boss, as well as your family and children.

Imagine that others are looking up to you as a model of personal efficiency. Imagine that you are the one who is setting the standards for time management and personal effectiveness in your organization. In everything you do, act as if you are being carefully observed by others. This will force you to be far more disciplined and controlled in your daily actions than if you thought that no one was watching.

Overcome Procrastinatin – Developing a Sense of Urgency

Set worthwhile goals for yourself, goals that you intensely desire to achieve. All motivation requires ‘‘motive.’’ A major reason for procrastination is that there is no specific goal that the person wants badly enough to get started and then to persist until the job is complete

Program your mind to overcome procrastination by continually visualizing your tasks as completed. Visualize your goals as already achieved. Repeat and affirm the words, ‘‘Do it now! Do it now! Do it now!’’‘Do it now! Do it now! Do it now!’’

Set deadlines for yourself on all important tasks

Create a reward system for yourself.

Program yourself to overcome procrastination by accepting 100 percent responsibility for the completion of the task on schedule. Look only to yourself. Rely only on your own ability