views:

561

answers:

9



As some of us have created their public site without an academic background, I ask this question mostly to professionals:

  • Enhance oneself : Non professional may encounter a barrier: it's easy to learn the basics (vars, loops, basic sql manipulation), but there are no "long term" tutorials, which really gives a deep knowledge. I know there is no better path but: what are the steps to become able to develop big(ger) projects alone? Something like: from spaghetti to MVC and OOP. Clicking links gives me knowledge, but not a good "framework".

  • Learn how to learn: Is there a way to learn how to use existing frameworks and pieces of codes ? Besides reading the help files, how do professionals proceed ? I don't want to copy-paste code anymore.

Extra question:

  • Career: Nowadays (not back in the 90's or the early 2000's), can a non-professional consider a developer career ?

Thanks for you replies.

EDIT:

Two great books that really helped me:

+6  A: 

Answering the questions in the order of appearance:

  • Learn some higher level design concepts to be able to see a big system clearly.
  • read some docs, use some code, dive deep.
  • Object oriented design concepts
  • Didn't find a perfect one yet :)

edit:

Enhance oneself You dont need long term tutorials. You have an abundant of professional material and you can start with the book's on the answers to the question here. I warmly recommend the first one (Code Complete). You can find good professional material on any other programming subject that interest you. The question is not what but when you'll find time for it all.

Learning how to learn is different for each one. Find what you enjoy the most and get on with it. Read, code and do both as much as you can.

Career: I think a non-professional can be sometimes more professional than some of the professionals I've met, If you enjoy it and find the challenge interesting you can do great things, you can make machines work wonders, and act gracefully and become a professional by attitude and not by some paper on the wall.

Since you are intersted in building a public web project, here you can find some excellent answers

Ido
Code Complete is definitely what I needed to read. I've read only 60 pages so far but it really gives me tools to understand how and why I should code in a certain manner. I warmly recommend it to people who are in my situation.
Coronier
+1  A: 

Learning from someone who really knows the craft will accelerate your acquisition of knowledge by orders of magnitude. There's just no substitute for working with another person if you want to learn fast.

The next best thing, in addition to finding someone experienced who wants to work with you, is to pick up some books on the subject. I think one of the first resources a new programmer should pick up is the Pragmatic Programmer. If you're interested in understanding why your code should be constructed in certain ways, down to minute detail, pick up Code Complete.

Other than that, I don't know what your problem domain really is, so I can't comment on exactly where to go after that.

Dave Markle
Actually, "I won't share" is a joke.
Coronier
I have met a LOT of people starting out where that, seriously, was their attitude.
Dave Markle
I know there are a lot of people like this. It's not my goal; my wish is to create a *free* tool for Psychology researchers with an open-source spirit.
Coronier
+2  A: 

I like your approach ;) I think you should try and learn some general programming topics, like design patterns, software design, development strategies (test driven, domain driven) etc. There's this list http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books of free ebooks you might find useful.

Mchl
+1  A: 
  • Read source code and try to understand how it works. Code a lot. If you are familiar with the basics of OOP, you will start realising how it works, when you have to write a very extendable code without a lot of code duplication. You can also learn a lot by studying other programming languages: haskell (functional programming is often very useful), smalltalk (how OOP really works), ruby (mixing different programming styles) and python (doing it simple) are good examples. Learn design patterns, and learn not to overuse/abuse them. Learn antipatterns, and avoid them. Start using PDO and SPL in PHP. Make a proof-of-concept CMS where you can easily output data in completely different formats (different kind of HTML designs, RSS, XML, JSON etc), so your system will be "skinnable".
  • Draw a lot. A big whiteboard helps a lot.
  • Absolutely yes.

Some other advices:

  • Use wikiversity and learn some computer science basics. It helps a LOT in the future.
  • Join to an open source community. Frameworks or CMS-es usually have very good communities with a lot of really smart people. You can learn amazing techniques from them.
Yorirou
+3  A: 

Question #1

Learning leads to understanding. To answer your first question "I want to learn ways to understand."

To learn how to understand, you need to take a look at what you know. What currently do you consider yourself able to understand.

Unless you had someone else navigate the web and take you to StackOverflow and type out your thoughts for you, I can assume you know how to operate a computer (turn it on, use a mouse, run an application).

So how did you get this far?

Well you probably went down a couple of roads, had someone demonstrate, read instructions, tried and failed. Eventually after awhile you used all of these to build an understanding of what is required of you to operate a computer.

Answer #1

The answer to the first question "I want to learn how to understand": It requires introspection and the study of yourself. You may gain understanding more easily from one method or another (demo, read, try/fail). So take some time and figure that out.

Question #2

Enhancing oneself.

Answer #2 Take a measurement of yourself, an inventory if you will. What are you capable of? Then take a look around, read job postings in a variety of geographical locations. What are the buzzwords that are being put into them. The buzzwords you don't know, research and find out what they are and what is behind them. The buzzwords you do know, research them as well and ensure you really know what they mean.

The internet is full of so much opinion you are bound to find multiple sources of information to contradict, refute and support what certain things are.

Once you have taken the temperature of the industry you are interested in, establish your own personal goals. What do you want? What is it about this industry that makes you want to be part of it? What are you interested in? What are you passionate about?

When you can answer those questions you can establish your personal goal of achievement and your personal measurement of success.

Now that you have a goal, evaluate (be honest with yourself) what will it take for you to reach that goal. Do you have the determination to self-educate, do you need help? Determine your parameters for achieving success.

Do what it takes, get it done, go after that goal, one step at a time. Check back often with your goal, evaluate your progress and congratulate yourself on even the smallest achievement.

Question #3

Learn how to Learn

Answer #3

First, believe and trust that you are not the only one in this position. That you share you situation with many others. Those that make fun or attack your lack of knowledge are just shielding themselves from their lack of knowledge.

Second be wrong. Be wrong a lot. Acknowledge your misconceptions. Clear your ego of all preconceived notions and open yourself to the possibility that even the most inexperienced individual can teach you something that you don't know. Have discussions with others about the topics you are interested in, share your perspective and appreciate theirs.

Expose yourself to as much of the subject as possible. Breathe it. Start small at first, review some old code you wrote and analyze what you did. Go character by character and talk it out. Explain what the code does. Think about it, try and rewrite it in a different way. Take a block of copied code and type it out change it make it do something different. Then move on to larger code bases and draw diagrams and write down what you observe.

When questions start to pop up, write them down, try to come back and answer them or seek the answer from other people. Once your questions travel from the code itself to the environment or context the code is running in, write those questions down and try to research and answer them or seek help from others.

Take a look at existing software, web or other, dissect it. Break it down into its parts and explain how you think it was built and how you might go about building it. If it is open source, look under the hood and see what they did.

Bonus Question

Can a non-professional consider a developer career.

Answer

Absolutely. By non-professional I assume you mean someone that doesn't have a Degree in a related field of study. Knowledge is knowledge. Proving that knowledge is easier with a Degree. It is assumed you have a level of understanding. However it guarantees nothing. In the software development industry especially, it is very common for people without degrees to be even more knowledge than those with them. A Degree is a piece of paper. Knowledge is yours.

Programming specific Items

Read about more than one language. Read/Watch articles about the history of computers and programming. Seek out individuals who have written about their learning experience.

Some of the people I have learned from include, Douglas Crockford, Martin Fowler, Dave Thomas, Edward Dijkstra, David Parnas, Larry Wall, Denis Ritchie, Brian Kernighan, The Sussmans, Harold Abelson, Tony Hoare, Linus Torvalds and many more.

Extra Cliche Comments

Nothing in this world is unachievable. Imagination and determination are the driving forces in everything we do. Curiosity is our fuel. Limits are something we put on ourselves. Don't be satisfied with what others think is enough. Attain what you want.

fifteen3
+1  A: 

Answer #1

Tutorials as you have pointed out as well only scratch the surface of development topics. That is why you will always have to stick to books for in-depth knowledge.

While I have to admit that from my perspective there isn't any good PHP book out there, I really found the PHP Certification Study Guide to be a solid/refreshing reference when it comes to learning the PHP fundamentals (which many up until this day still lack).

Even with the fundamentals, coding is on top of that list. No theory can beat the hands on experience.

Anwser #3

Maybe I don't fully understand your question, but if you are referring to a non professional as someone who didn't finish a university in the CS field, than the answer to your question is yes. With enough exposure and ambition you can easily start a developer career.

mhitza
A: 

I think the best way to learn writing better code or code for bigger projects is simply writing it. Simply find some project you want to join and work on it. See it failing and find out why. Or see it succeeding and be happy.

nikic
+1  A: 
  • Enhance by expanding your knowledge. Learn C and C++ and or Objective-C. Nothing is too unrelated to learn. Learn by doing not by following tutorials, if you get bored while reading a tutorial take a detour, make it interesting. Join a Project that is interesting to you.
  • Read documentation as you go and need it. When standing in front of a problem, search the documentation, search the web, search your mind.
  • Im 19, started with PHP, learned C, C++ (briefly) and Objective-C. Currently working at a Ad Agency Downtown Vancouver, 8'336 km away from home, by choice.

Stay Hungry Stay Foolish Steve Jobs

Thomas
+1  A: 

1. Enhance

I think we've all had our spaghetti code moments. Odds are, what most of us are proud of now will look terrible years down the road. PHP especially has entirely too many ways to come about the same answer, many of those ways are not best practice, but will provide functional (if not manageable) code. It is up to you as a developer to stay on top of new ideas and methods when doing PHP development. That said, this question really ties into #2

2. Learn

Refusing to copy/paste PHP code will force yourself to understand the code that you are creating. If you want to learn, and also enhance your code I recommend you immediately stop this habit. Sit down with a proven framework (all of which will be OOP, most of which will use solid design practices such as MVC, Zend is a good choice). Read documentation - follow tutorials, extend existing classes. Break code and fix it. If you want to become a quality developer without a formal education you will need to have a certain appreciation and drive for what you are doing. Once you feel you have a solid grasp on modern/best-practice PHP development, get your self into the community and do some real-world application design. There are hundreds of open source PHP based projects out there, find one that interests you and get involved at whatever level you can handle. This will also help with #3

3. Work

Without a doubt. But you will need to prove your knowledge in other ways if you have no prior experience. Get involved with the open source community, build your own projects, when you have a solid portfolio built up you'll already be ahead of most recent grads. I work in PHP development without a CS degree, and while you may never get a job at Google, there are countless small medium and large firms/companies looking for driven self-motivated developers. Who better fits that description than a self-taught, competent PHP developer that obviously loves what they do? Once you have the work experience, almost anyone will take that as an equivalent to a CS degree.

Have fun with it, we are all learning.

Mahdi.Montgomery