What separates self taught from trained professional devolpers? [closed]
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 ye开发者_运维百科ars ago.
Improve this questionI've been developing with C#/ASP.NET (and now ASP.NET MVC) for several years. I'm 100% self taught, and I'd like to believe I try to do what's best practice, but...
My question is, what do you think separates self taught developers from trained professional developers? What techniques, in C#, would you consider advanced - that self taught developers may not have picked up on their own?
Update:
I love the responses so far, thank you. Here's a bit of clarification for what I was looking for.
What C# features/techniques/usage do you think that professional developers use that self-taught may not (usually self-taught go with what's easiest to learn first)?
lets say,
from 100 developers, 5 are highly motivated by their passion for technology and self teach them what they think is the best thing to know.
the other 95 developers will be trained by those 5 developers and what they think that are the best techniques.
Best practices/techniques?:
IMO these are ways, to develop a software product, known to lead to a performant and maintainable system - and these ways come with the experience from the development of a real software system and not one from a training course.
// Latter edit:
//Short on topic answer
-> C# best practices in a corporate enviroment?
They use frameworks similar with CSLA http://www.lhotka.net/cslanet/ , or they make or use frameworks which has at the basis concepts like: Business Entities, Business Components or Business Objects.
More sepecific on C# -> nothing just go with the conventions :).
//Long boring answer:
-- My background
I worked with ASP.Net MVC 1.0 in a company with 170-200 employees and now I'm working in the same company but just on ASP.Net, we pretty much do ERPs and big web apps like that.
I self taught myself ASP.Net MVC and when I worked on ASP.Net MVC I had to do small trainings for the other memebers in my team which didn't had experience with it.
By my logic,
A selft thaught is a developer who works on frelanching projects or in a startup.
A corporate trained developer is a person who works in a corporation with 100 - 50000 employees and does java/.net in well controlled and planned corporate enviroment.
Because even if you are self thaught, in a corporation you will end up beeing trained.
//Technology
A self thaught thinks more about the technology itself, not carring about: "will this thing be easy to maintain after 3 years, is this good for an enterprise client... and so on.
The thing is that a self thaught will always teach himself the latest technology while a corporate trained developer usually is trained on the "mature technology" which is "risc free" and everybody in the corporation board thinks that this will stay here for at least 10 years...
Therefor because of that an responsible PM in a corporation will enforce their devs to use in the project an Inversion of Control Framework - one that is mature :P.
While a self thaught, because he didn't went through big projects, will be tempted to just code.
I go on the logic that a big project needs over 50 devs and that is kindoff corporationish.
Remeber if you are self thaught and work in a corporation you will get trained...
//Project and scaling thinking
A corportate developer doesn't have to think, he has to know very well the flow and the practicess that are thought in the corporation.
A corporate PM will always think about scalability and to have a smooth architecture, while
a self taught person should think like this:
http://www.aorsi.com/wb/startups_die_for_not_having_customers_so_stop_thinking_about_how_to_scale/
//A little bit of coding practicess:
Corporation:
We want to develop X and Y, good let's build a framework around the solution, maybe something like CSLA, Business Entities or worst case Business Components, we create 3-tieers and split the project on tasks.
In a corporate enviroment you want to do this because you are always thinking about maintenance, which is kindoff interesting because you will reach the sentence -> "we need developer A, B, C, to train the newcomers about the framework" - so you still have a little bit off overhead with the training...
Self thaught developer:
Dives directly into the tehnology.
//Coding practicess are the same for both self thaught and coroporate trained:
For example in ASP.Net MVC
Keep your controlles very clean and small in size.
TDD is more and more frecvent used in corporations and by self thaught devs.
I am also a self-taught developer, and have moved into a company that is largely made up of "qualified" developers. I don't deny that many of my colleagues are the best people I have worked with, but being self taught has also given me a drive to improve myself constantly to try and keep at their level.
From my experience, qualified developers tend to have better grasp of process. They have good structured methods of design and implementation. The qualified developers usually also have more confidence to chose and idea and stick with it, drawing on the experience from their qualification as well as their own experience. That isn't to say that being a self-taught developer is a bad thing. Self-taught developers that I have met tend to be well read, and good at trying different solutions to find the most appropriate.
As for what techniques in C# specifically a trained professional might have that a self-taught person may not, I don't think there are really any. However the trained / qualified developer may have a better understanding of things like design patterns, data structures or development methodologies, but a good self-taught developer will be able to learn these as well.
The main pattern showing up in the differences between self-taught and trained developers is around awareness of theory, technology options available and importantly relevant technology and industry standards. That's not to say a self-taught developer cannot match a trained developer, it's just a trend. Examples of each specific to C# and ASP.NET may include understanding OO concepts and how they apply in different scenarios, application of design patterns, understanding of TCP/IP and HTTP at a protocol level, and knowledge of PCI-DSS and its implications for web application development.
self-taughts would..
- be self-motivated to software development.
- be passionate about their job.
- be not complaining.
- have far better knowledge of how web and http works [since you asked asp.net mvc].
- not first solve the problem, rather first find the right problem.
- eventually become ninja-developers.
All developers are self-taught developers. Training courses are an introduction. The most, and best, training comes from experience, and any professional developer must be prepared to be continuously "in training". In fact, many job postings explicitly list self-learning as an expectation.
It's unreasonable to expect schools to stay current with the various changing technologies used in the real world, so they rightly tend to focus on concepts. But even patterns and methodologies aren't static. What is the "best" pattern could depend on the language, or the framework, or the project itself. Again, developers must be adaptable and open to learning new concepts or even reevaluating concepts they were taught in school.
As for C#, general object-oriented programming practices apply. I don't think C# itself is generally taught in schools, but language-specific features are usually just convenience layers over patterns that are already used in general. For example, properties are just pairs of methods, and events are just an implementation of the observer pattern. As with all languages, you should follow the conventions used by its community, such as identifier naming rules.
If you're worried you might be overlooking some topics that are covered by professional training, you could look through complete lectures from top universities at YouTube EDU:
http://www.youtube.com/education?category=University/Engineering/Computer%20Science
One can self teach himself programming languages, algorithms, OO principles and patterns, XP and group based developing, usability principles and testing, etc.
But it's most probable that he will only learn about programming languages.
Even in universities some people learn only about programming languages.
You can teach anyone to be trained professional developer giving to them some templates and patterns etc. but you cant teach anyone to be passion for technology and self learning. Self learning and motivation only the key to workmanship.
e.g if we compare developers with food =>
Trained professional developer - unnatural fast food (MacDonald's etc)
Self taught developers - excellent natural well cooked home food.
Now feeling the difference?
精彩评论