As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
I'm looking for a personal project. One of the sort that "every programmer"* makes. The reasoning is that most developers have a tendency to work on personal projects that have particular traits interesting to all other developers. Software like:
Bug trackers (made one)
CMS (made one)
Blog Engines (Haven't made one; don't want to)
UI 'libraries' and graphics 'engines' (often for the game development crowd)
Password management programs
I'm looking to make something
fun
interesting
not particularly challenging (my work is difficult - or obscure enough)
doesn't have to be original by any means
preferably an application (ie. not a website)
not a hardcore learning experience, this is entirely for fun away from work
That being said, I find that the terms 'interesting' and 'challenging' don't necessarily carry the same meaning for developers as they do for other people (and often-times are interchangeable - I'm not looking for something easy or trivial). Ditto with the 'learning' part, I like and want to solve problems, but I'm not going to be getting into design methodologies or learning entirely new APIs and Languages to do this.
I ask because I think that certain projects, or types of projects, appeal to developers for particular reasons. I don't claim to know what those reasons are, nor do I care, but I do understand that they exist and that being a developer, there is a strong likelihood that the projects that are suggested will appeal to me.
If it helps, my background or preferred medium, without reciting my resume, is c# development for windows/tablet pcs; xna; db design/programming;
*by "every", I mean, "lots of".
You have XNA experience, and DB experience.
Develop a visualization tool for databases which is visually attractive and makes mining data easier.
This can start as a simple browsing tool and eventually grow to a full-fledged DB management application.
If you haven't written one, knocking together an implementation of Conway's Game of Life is always an interesting challenge. It's also the sort of project that once you get it done leads to seemingly endless tinkering ("I'll just add one more feature...")
Graphics are always fun to play around with, try writing a program to draw a Sierpiński triangle. It's a fairly simple fractal to generate. I once made a screensaver that drew them in random places and colors on the screen.
If you are looking for something more practical, try writing an email or RSS client. Learning to interact with SMTP/POP3 at low level is pretty interesting. Same thing with RSS, it will expose you to network, GUI, and XML design at a minimum.
Maybe write a compiler? I think every artist/craftsman should, at some point, learn how to build the tools of their art or craft.
Write a character generator for the pen-and-paper rpg of your choice.
It should be able to be used in 2 modes: Build-A-Character (which will let you build a character from scratch) and Generate-An-NPC (which, given some guidelines, will generate a decent NPC).
This is actually a project I've been working on for a while, and I've found it fun. YMMV, especially if you don't game regularly.
Edit - figured I'd give some reasons I find it fun.
It's something I and my friends will actually use
It helps me understand the game better, knowing what decisions make a good character
There's some (limited) AI in the random character generation(mainly a simple decision tree with some random jumps)
It's overall fairly simple, a reasonable project for a one-man development team.
I'm looking for a personal project. One of the sort that "every programmer"* makes.
How about writing your own scripting language interpreter?
That's a very common thing to do, which is usually not only a highly educational experience, but also fun and interesting.
Once you are finished with something working, you'll start thinking completely differently about programming, it will change your way of thinking!
A Sudoku game (or Connect Four, Clue, etc.).
Something that relies mostly on logic, and not artificial intelligence (like chess).
How about a ray tracer? It can be very simple if you do everything by brute force.
They are very fun to write and can lead to many interesting problems. Writing a ray tracer meets all your criteria =)
Each and every developer is different. About three years ago I asked exactly your question on some other site. It brought nothing because we all have different interests.
Maybe to make a website with focus on what you like? Like a small community within a university or your other fellows?
In order to learn Ruby, I just recently made a mini DSL/XML generator for a custom XML based language I use in a program of mine. I simply turn some real text into its XML representation. It was just a fun little side project that didn't provide much benefit in the long run but helped me to learn the language.
So... I suggest trying to create a DSL. The experience could actually prove invaluable as DSL's are pretty damn useful.
Write a 3D environment populated by artificially intelligent virtual beings, implemented on a public server, that we can all access using a WPF-based client.
Personally 'interesting' strongly overlaps 'difficult', so I'm kind of at a loss ...
... but perhaps you should take a non-programming interest you may have and try to solve a simple problem in that space.
A friend of mine once built a model railway database so people could track the trains they had. He was trying to sell it, that didn't go so well, but it was simple and fun.
Why not rolling your own
Web MVC framework or
Web templating system or
Persistence framework (+1 if you make an OR-mapper) or
Interceptor-based aspect-oriented framework
But oh, those were the sins of early 2000's.
Something cloudish then? :)
I had fun programming an audio player (like winamp / WMP) to learn .NET before I started my current job. There are free libraries to read MP3 files (and other audio formats), so that gets the complicated part out of the way ;)
An audio player is not too complicated and is good for learning threads, UI, and working with the file system.
I've always had fun trying to play with compilers/interpreters. I started out making pathetic attempts at my own Javascript interactive shell (I had no prior experience or knowledge of compilers/interpreters and just tried to wing it). And now I'm about to start working on writing my own lexer/parser from scratch.
Personally, I find compilers and interpreters interesting. You can use them, or their components as a start of other project ideas too if you wanted. Also, you can play with them in any language of your choice, so it might not be a bad side project if you want to learn or use a new language and aren't sure what to focus on to do it.
I've always enjoyed writing a little physics simulator or the canonical mandlebrot / julia set generator (parallel extensions anyone :)
Some kind of GPS tracker? I never made one but I believe that of lot of devs do.
Write an touch screen game for a Windows mobile device that competes with the iPhone. Maybe like,'Squash the Bug' or something. Chicks dig that kind of stuff.
Search for a good flash puzzle game and implement a solver for it :)
Personally, it based on your own preferences. For me, it was a grade book program. Since I always had teacher friends, they always wanted me to update it. So I first wrote it in Pascal, then wanted to learn C, so I wrote a C version, then a C++ version and so on.
My daughter was playing basketball, so I wanted to keep score and I had a PocketPC at the time, so I wrote a little app for it.
My $.02
Related
I am in the last year of undergraduate degree and i am stumped by the lack of example in c++ and c# large project in my university. All the mini project and assignment are based on text based database, which is so inefficient, and console display and command, which is frustrating.
I want to develop a complete prototype of corporate software which deals in Inventory, Sales, Marketing, etc. Everything you would usually find in SAP. I am grateful if any of you could direct me to a books or article or sample program.
Some of the question are :
How to plan for this kind of programming? should i use the concept of 1 object(such as inventory) have its own process and program and have an integrator sit for all the program, or should i integrate it in 1 big program?
How to build and address a database? i have little bit knowledge in database and i know SQL but i never address database in a program before. Database are table, and how do you suppose to represent a table in a OOP way?
For development type, which is better PHP and C++ or C# and ASP.NET? I am planning to use Web Interface to set form and information, but using a background program to handle the compute. .NET is very much integrated and coding should be much faster, but i really wonder about performance if compared to PHP and C++ package
thank you for the info
This may not answer your question directly, but I thought this might help you get started in some way. So here it goes: I would say, "think through the process". This means, think through the software development process:
Gather requirements
Identify and define the problem.
Get as much information/facts as you can. (turn on green light, think about everything that you want to go into your software)
Come up with a baseline (turn on red lights, what you really want? the minimum functionality your software "must have" - cant live without)
Analyze
Know what you don’t know, what are the missing facts?
Evaluate your information or lack of it/reliability of information source.
Infer facts that you don’t know.
Form an assumption, opinion, or possible solutions.
Consider alternatives and implications of each solution.
Form an action plan.
Identify technology pros/cons.
Decide technology
Comeup with a functional specs.
Research
Dig into stuff that you would want to know (Best database, ORM, design practices, code samples - gather everything, read about inventory systems that are already there)
Design
Develop
Test
Fix
Prepare deployment plan
Release the product
Gather user feedback
Analyze user feedback
Plan for items in next release.
Repeat steps
And Enjoy!
Before I start this is a shallow answer to a deep question.
1) It looks like you have a reasonable grasp of the major components of your target application. As a .net developer I'd build assemblies that matched broad areas of functionality (not sure what the equivalent is in PHP) and then you can use those assemblies together as a single large app, or seperately as required. It's unlikely you'll get it right first time, so build it how it feels right, and then do some ruthless refactoring to make it better once you've got a handled on the problem.
2) This whole area is covered by Object Relational Mapping - ORM, NHibernate is the best of the bunch in the .Net world. BTW if you learn that you'll be way ahead of the game come graduation/work time. Raw sql is so last decade. I guess you know that Sql Server Express is a free download?
3) For development go with the languages/environment you feel most comfortable in. My preference is .net, and the integrated coding is much faster. Performance is definitely good enough, especially as this is learning project - SO runs on .Net and that supports a gazillion users pretty well.
Enjoy
I don't have any good recommendations for SAP-like projects in particular, but in general the best examples to use for things like this are well-established open-source projects. Anything else is going to be a "toy" example in one way or the other, and will be simplified and cleaned up. It's the "cleaned up" that makes it most unrealistic -- one of the really key things that makes real-world large software projects different from university examples is that the real world is messy, and real-world requirements are messy, and collaboration between lots of people with not quite the same priorities is messy, and real-world software projects have to adapt to and thrive in this messiness.
In answer to your specific questions, though:
1.) Do things in a modular way. This means you have something you can test and work with as soon as you get the first module done. That's especially important when you're learning, because (a) you probably won't have time to actually finish the whole thing, (b) you'll learn a lot from writing the first bit that you'll want to apply in future bits and then you'll probably want to rewrite the first bit, and (c) you'll learn even more from using the first bit.
2.) There are many views on this, and many online articles and books. I can't answer that in an answer here (except to note that in some cases trying to represent it in an OOP way is the wrong programming paradigm -- be careful about overconstraining the answer by the question you ask!); the right answer is to find things to read and spend some days reading them.
3.) You do not care about that sort of performance issue here. Successful programs have been written in both forms. You care about what will teach you the most, and what you are comfortable working with. Either one should be fine. You'll probably find more open-source pieces to look at with PHP and C++.
Your question pretty much covers the whole gamut of planning for a project; a whole thesis might be written (+:
Keep in mind what your team and your teaching-staff want out of the project.
1) Modular is my choice. It'll force you to address the application one module at a time and keep you focussed, but that is subject to
The familiarity of your team with the preferred/recommended language for this project.
Time in hand
Remember that modular means you will necessarily have to provide for module integration too.
2) C++ or C# ? Whichever offers the more learning experience. My own experience with both mentioned technologies is limited, but I remember there used to be a Database Template Library (DTL). C# on the other hand will probably be faster to develop. I could be wrong. There are any number of free DBMS engines available on the net. Unless the assignment explicitly recommends using a text, opt for one of these.
3) I concur w/Brooks up there ^^^
Good Luck!
You are a university undergraduate. And you are talking about complete inventory system.
I suggest building a blog application first with all the best practices (like blogengine), then move to e-commerece sites (nopcommerce, dotcommerce). And then do whatever you like.
This is a common problem with undergrads like you, of jumping way higher without building any simple projects first.
As a full time PHP developer, PHP sucks! ASP.net is okay (mmm... no it sucks too), but it locks you into proprietary licenses.
If you're starting from scratch, go for node.js. It's c++ and server-side javascript. Yes, it's new, but it has engineering promise. It'll be more commonplace in a few years.
And if you're worried about performance, don't. Javascript in V8 is extremely fast.
http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php
Here are some node.js links to get you started:
http://www.delicious.com/homer6/nodejs
Enjoy.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I am learning the language c. After c I will probably move onto objective c and develop some iPhone applications. Then I was thinking about learning c# and xna.
How long do you guys think it will take before I can develop a pretty decent hitting or roleplay game for the xbox?
My friend is also learning game design s I will have a game designer and my other friend is going to learn code like me.
How long do you guys think it will take before we can develop a game like I said .
Any tips on books or? What kind of game engine we hould use? Anything at all so we can stratup and learn that you know of.
It depends on so many things that it's impossible to say. One tip is though that start small and finish your projects. It's easy to start too big projects that never gets finished.
12 is the right age to start - most of the good programmers I know started out young. I look out for it on CVs when hiring.
I started on a Spectrum 128k writing in BASIC.
A fully fledged game is a lofty goal, a worthy one, but one a fully fledged professional would struggle to attain.
I'd start with a simple game - a Tetris or Breakout clone, or maybe even something text based. Something simple will be better for learning the basics. You're learning the language as you go, so expect:
It will often be slow - you will regularly have problems that it takes a while to figure out. It's good that you have a friend leaning the same thing.
The code you wrote at the start will look rubbish later - be prepared to re-write as you get better. You'll start out making naive mistakes, but you learn from them.
That second point applies even to the best professionals when working with something new. No one gets everything right first time and you learn more from mistakes than successes.
And have fun!
Glad to see that you are enjoying programming. I think there will be a lot of different answers to this question ("Should I do C or not?") But I think its a good thing that you start by writing code in C. You will learn a lot of basic stuff that you might have passed if only going for the XNA framework right away.
BUT! Don't wait to long. The XNA framework is quite powerful and it makes it very easy to get started. I think you should ask yourself (including your friends) "what you think is the most fun part of developing a game?"
Is it the game design? graphical programming? just programming? making graphics?
Perhaps that answer will give you a hint about what to focus on.
Cause private projects should be about having fun.
This entirely depends on your talent and passion for the work.
Good to see some people getting enthusiastic about programming - and better still playing about with C. Starting out with C, even if it's to do basic "Hello World" style programmes, will give you a good basic understanding of concepts like memory management etc.
But as others have said - don't wait too long to jump over to C# and XNA: yes the frameworks are quite big and scary, but you'll be amazed at how quickly you can get things done once you get a basic grasp of the language.
A few points I'd like to point across:
Firstly, do not be discouraged or disheartened when something doesn't work, or when something breaks, or if you receive negative feedback (the proverbial "it sucks" review). If you are confident in your idea and more importantly, if you are enjoying it, keep going.
Don't expect to be producing awesome graphics and FPS style games from day one: but don't let that worry you. For big budget games, the "media" side (3D models, artwork, audio) are at least a big a job as the actual game programming, if not more.
Start with a good idea and be confident in it. Don't worry about graphics: if the game is good people will enjoy it. Look at the vast majority of "market place" games (iPhone, Android Marketplace, XBox, Facebook): they all have fairly basic graphics but are based on good solid concepts. And some of them make money, lots of it.
If you stop enjoying a particular task / project, don't worry about parking it for a while and moving on. More often than not you'll have an "eureka moment" (probably at 3am if you are like me) and come back to it with renewed enthusiasm.
RPG Maker is something cool you can try out. It'll let you make RPGs without programming, which will give you an idea of how games are designed. It'll also be easier to start on a PC than an xbox if you're learning.
I have a mate who is a game developer, working on state of the art games like "Call of Duty". Im not sure if the language is as important as learning the concepts and being active in the community.
My friend made it big by developing content for existing games and getting known that way. Its really hard to made a game that can compete these days but its not impossible. As Keith mentioned its important to start simple and learn the basics but its also equally as important to contribute online and to surround yourself with like minded people. That is how you will make your first break in, and thats all you need.
I have been a programmer for years now and I would say that I learnt 90% of what I know from others or online not from reading books. Books are great for reference. Take what you learn and apply it.
Im sure if you work hard and contributte online you will make it.
Good Luck!
This might be able to help you while you learn XNA and C#. I am trying to spread the word about my free open-source project called 'XNA Debug Terminal'. It creates a display on top of your game and allows you to look up values, invoke methods, or even watch values change in real-time while your game is running. I'm sure this could be of some help to you in learning what is going on in your game at various points. The website can be found here:
http://www.protohacks.net/xna_debug_terminal
If you like it, please tell other people. I, myself, have found it quite helpful in my own projects. The website tells you all you need to know about it.
Here's some good advice: LEARN to code in C (i.e. read a book on it or whatever) but thats as far as you should go with C. Learning C teaches you things you'll never learn in another language, and it helps you understand things you wouldn't fully understand without learning it, but it's not gonna be useful to you for much longer.
C++ is taking over C in the game world quickly (in fact, you could get away with saying that it already happened), and I have a feeling that we may see C# become a big player in the game world too, as computers are getting faster.
But like I said -- learn C, then move to C# or java (I'd go with C# for sure), and then pick up on XNA.
Also, when learning c#, look into the book, "Head First C#." It's a good one, and it does quite a bit of stuff with gaming.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
When you can create classes and do the simple stuff (GUI, reading text files, etc...), where do I go from here? I've started reading Code Complete 2nd Edition which is great but is more of a general programming book. What topics should I learn next?
I'd argue that, at some point, it's no longer about topics. It's about doing stuff. You gotta write code an you've gotta write a lot of it.
People will often tell you to find some niche problem to try and solve when learning a new language and that's perfectly fine, but if there's an application or feature of an application that you really enjoy using or really admire, attempt to build it (or parts of it) yourself. Even more so, if you find your self wondering Hey, how does [this application] do that?! Try to build it.
Many of your projects may never see the light of day beyond your desktop, but the learning, experience, and tools you'll have under your belt will be something that you can carry over to each subsequent project.
You never know, though, one of those little hobby projects may end up solving a problem for someone.
Not to disagree with the folks who are saying "write stuff," but one topic that you should learn about next is the underlying fundamentals of the CLR -- the workings of the engine that sits behind all of these libraries. A good resource for this is Richter's "CLR Via C#."
Write a desktop RSS reader. You'll get exposure to a bunch of different areas (parsing files, graphical apps, HTTP, the flakiness of the internet), and you might actually use the result on a daily basis. Picking a specific goal or feature to work towards will help you learn more quickly than something abstract.
I agree with most of the answers so far, but I think that if you want to improve as a developer you can benefit greatly by not running solo. Try to find someone who can coach you. Over the years I've made my greatest leeps in depth of understanding by teaming up with programmers who were smarter and more experienced than I was. (They still are :-) )
Learn another language and apply the learned knowledge to C#.
F#, Scala, Haskell - lots to pick :)
Get ReSharper, keep all recommendations enabled and understand them.
Learn best practices and software engineering and how to apply them to C#.
Learn Version Control, TDD, Domain Driven Development, Continuous Integration, MVC, MVP, A handful of patterns: facade, factory, repository vs. active record, etc.
Learn tools that will help you avoid reinventing the wheel: Validation Application Block, NHibernate, etc.
I found this free e-book from the guys at CodeBetter a few days ago:
link text
I haven't read all of it but it looks like a good read.
Try reading the Mono source code to get a look at how a C# compiler written in C# looks. You'll learn so much about the language, compilers, and computer architecture. This is the great benefit of a project with source - you can learn from it.
Visit CodePlex.com and GitHub.com and look for open source projects which you can contribute towards.
looking at q/a of stackoverflow, c# topic. :-D
The best way to learn is to actually get stuck in and build some cool apps, websites, whatever. Its still a good idea to keep up with the various websites to learn new stuff that you might not have come across though.
Maybe build the next facebook or google :)
Also a good way is to get involved in a small project with multiple members (friends maybe), so you can learn from each other and see how other people do their stuff.
Read code
Write code
Test code
Read books (some suggestions), blogs etc.
Repeat
write good unit tests and try to get the code coverage as high as possible
Write code yourself, and read the code that has been written be someone else. But, not anyone else; of a person of whom you're sure that he writes good, clean, smart code.
Work in a team with better programmers - get employed
Work on large open source projects.
I disagree with most people here that learning by building stuff just by yourself is the best way.
Write code, lots of it. And not those fluffy little HelloWorld-type programs.
Find either a real project that interests you or something you've already written that can be converted to C# and do that. Only by doing (and, unfortunately, making copious mistakes) do we learn.
practice, look at open source projects, understand completely what it does and how it does it, especially complex libraries like mocking frameworks, ORM, etc
CLR via C# a great book !! helped(still helping) me a lot understanding the language also you can download the c# language specification book
If you want to become a better C# (replace with any other language), work on large scale applications, the kind that has certain features on 'musts' in it that you know you have no clue how to realize them, yet. All the easy ones around these core 'nuts-to-crack' will help you, too.. it's always good to get used to thinking in large, interwoven dependencies in projects which force you to think through and layout the architecture of your final product upfront.
This isn't particularly c# related, but if you want to become a better developer, these kind of projects (that implicitly include lots of ((c)lean) coding and testing etc etc) are the best learning grounds.
If none of the clients wants to 'give you the chance' to work on such a project with your current skill set just yet, go ahead (or in any case) and start coding on an opensource project and keep friends, colleagues and places like stackoverflow involved.
Be prepared and open to make 'errors' (as you might judge them afterwards)... because only with a gazillion errors made you see the slim/windy path in between them.
That being said, learn to not over-engineer or get tooo perfectionist too early. Bugs will be made, bugs may even remain in a final product considering certain impact conditions etc, learn to live with that as an engineer/developer.
Suggest you read C# in Depth. It is a deep dive into C# that will greatly enhance your understanding of the language. The author, Jon Skeet, is rumored to be a lurker on this site...
With a new language, try to solve some of the Project Euler problems. Improving math and coding at the same time!
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I am not that good at programming. I finished my masters degree in electronics. I want to learn C#, the .NET Framework, and SQL. How much time do you think it would take (if I have 5 hours a day to devote to it)? Also, what order do I learn them in? I have Visual Web Developer 2008, is that enough to begin?
Copied from a new question by the same user:
I should have specified that I wish to make a career out .NET Development. I'd like to give myself 2 months to get the 'basics' down. As a developer, what is expected out of you in IT companies? What skillset do they require and what are the responsibilities as a junior or mid-level developer? I don't have any industry experience, will I be able to get a feel of the job duties while at home?
That's like asking how long it would take to learn French:
1 day to learn what it is
1 week to learn it to an infant/elementary level
1 year to be considered a beginner by professionals
Several years to be considered an experienced professional
Plus there's "deep" knowledge of those subjects which a mere mortal such as you or I will never learn
Then again, plenty of people (most normal people, non-programmers) never learn those subjects, so if you're like "most" people then the answer would be "it would take forever" or "it will never happen".
Dive right it, make it a hobby, and have fun :)
Coming from an electronics background myself I can tell you that you should pick it up pretty quickly. And having an electronics background will give you a deeper understanding of the underlying hardware.
IMHO the root of information technology is electronics.
For example..
Think of objects as components.
The .NET framework is essentially drawers full of standard components.
For example you know what a 7400 (NAND gate) is capable of doing. You have a data sheet showing the pin outs and sample configurations. You don't typically care about the circuitry inside. Software objects are the same way. We have inputs and we have methods that do something to the inputs to produce predictable outputs. As developers we typically don't care how the object was written... just that it does what it says it will do.
You also know that you can build additional logic circuits by using two or more NAND gates. This of this as instantiation.
You also know that you can take a NAND gate and place it inside a circuit where you can modify the input signals coming in so the outputs have different behaviors. This is a crude example but you can think of this as inheritance.
I have also learned it helps to have a project to work on. It could be a hobbyist project or a work project. Start small, get something very basic working, and work up from there.
To answer your specific question on "what should I learn first".
1) Take your project you have in mind and break it into steps. For example... get a number from the user, add one to the number, display the result. Think of this as your design.
2) Learn basic C#. Write a simple console application that does something. Learn what an if statement is (this is all boolean logic so it should be somewhat familiar), learn about loops, learn about mathematical operations, learn about functions (subroutines). Play with simple file i/o (reading and writing text files). The basic C# can be thought of as your wiring and discrete components (resistors, caps, transistors, etc) to your chips (object).
3) Learn how to instantiate and use objects from the framework. You have already been doing this but now it's time to delve in further. For example... play with System.Console some more... try making the speaker beep. Also start looking for objects that you may want to use for database work.
4) Learn basic SQL. Lots of help and examples online. Pick a database you want to work with. I personally think MS Access is a great beginners database. I would not use it for multi-user or cross platform desktop applications... but it is a great single user database for Windows users... and it is a great way to learn the basics of SQL. There are other simple free databases available (Open Office has one for example) if you don't want to shell out $ for Access.
5) Expand your app to do something with a database.
Just do it! Don't sweat the details.
Well, it will take you forever. There is so much to learn about programming that 10 years are not enough.
http://norvig.com/21-days.html
Don't get me wrong, you will learn the basics quickly enough, but to become good at it will take much longer.
You should focus on an area and try to make some examples, if you choose web development, start with an hello world web page, then add some code to it. Learn about postbacks, viewstate and Sessions. Try to master ifs, cycles and functions, you really have a lot to cover, it's not easy to say "this is the best way to learn".
I guess in the end you will learn on a need to do basis.
The best thing about C# is that it is very catchy. Easy to pick up, and you'll also have fun doing it.
But .Net framework is a very big library full of wonderful things to discover, and yet again due to the nature of .Net you'll also have fun learning it. It's a coherent, object oriented, well documented library, and C# makes it so simple to work with it that you can simply discover your way through it while coding.
The vast majority of articles, books or resources about .Net and C# simply concentrate on explaining functionality and the framework and far less about how to avoid quirks, workarounds or exceptional cases, like it happens with other languages I don't want to name (*cough C++*) so in the end the experience of learning C# and .Net is very enjoyable from start to finish, and the things you can accomplish using .Net also makes it very rewarding.
You picked a good language to start with, in my opinion, and finally to answer your question, it will take you about:
2 to 3 months to learn the basics
1 to 2 years to become a versed developer
5 years or more to become a expert or, depending on your dedication, a "guru".
But then again, beating the numbers and breaking the limits lies inside human nature. Can you do it faster than this? ;-)
How long is a piece of string? I think this is subjective. I know programmers that have learned an extraordinary amount in a very short time based on the experience that they've exposed themselves to.
Basically, get your hands dirty and you're bound to learn more.
It really depends on what you mean by "learn". You could probably spend a week and get a couple of pages up on the web that had some minimal level of interactivity to save information entered by the user in some database, and then have some other pages for querying and displaying the information. You could then spend the next 10 years of your life learning all the intricacies of the .Net framework, SQL, and mastering using the IDE.
The period of which you are capable of learning really depends on your ability to grasp the logic behind programming while where to learn from depends on your learning style.
If you are a learn-by-a-book type of guy, just jump on Amazon.com and perform a quick search, pick up the book with the best reviews or wait for someone here to recommend a book (I'm not a programming by book guy)
If you prefer screencasts (video feeds demonstrating what to do) or tutorials, then go straight to the source: http://www.asp.net/learn/. There are tons of videos and tutorials explaining everything you need to get started.
Visual Web Developer 2008 Express should be all you need to get started. Basically, the express editions are Visual Studio chopped down to a precise set of functionality to accomplish one thing. They don't have some of the bells and whistles needed for large scale development, but everything you should need.
Can't tell how long it would take, it really depends on your existing knowlege. I managed to learn the C#/.NET 2.0 core basics in about 2 months.
My suggestion to you: Try to learn towards exams, they make sure your learning covers all important parts and also guide you through this new technology. See Microsoft Learning.
If you have any programming experience, you can probably learn the C# syntax in a few hours, and be comfortable with it within a week or so. However, you will not be writing complex structures unless you write a lot of code with it. It's really the same as learning any language: you can learn all the words and grammer fairly quickly, but it takes a while to be fluent.
EDIT
A book you may want to pick up for learning C# is C# in a Nutshell (3.0) which I found to be very useful, and has been recommended by several people here.
If you want to learn, REALLY want to learn, then time is not of consequence. Just move forward everyday. Let your passion for this stuff drive you forward. And one day you'll see that you are good at C#/.NET.
You'll pick up c# fairly quickly (the language syntax is not that complicated). It will take you a long time to really learn the .NET framework, but you'll pick up the heavily used parts of the framework fairly quickly, and you should start seeing patterns in the framework.
My advice to you: don't just learn from a book or website. They will teach you the language and framework, but they will not teach you how to program anything useful.
Writing little code snippets will teach you how to do a very specific tasks, but they do not teach you how to write applications. My suggestion is that you think of an app that might be fun to work on (and doable... e.g. don't think that you're going to write an operating system or crysis or something in a month or two). Personally, when I was learning, wrote my own full featured IRC app, complete with rich text, personal messaging, etc.
The answer in my view is related to whether you have a tangible problem to solve or if you just want to learn for example to be prepared for a possible new job. If you have a problem then you are in better shape. You can start by looking around and seeing how other people went about solving that problem. Languages in general you should be able to pick up fairly quickly (after all you hold an MS in EE, no small feat IMO).
What you need to be on the lookout for is good programming practices. You'll probably see yourself asking "why is this method so small", "why is this method empty and what the heck is this abstract word doing here". That will give you perspective beyond syntax towards good writing.
When I switched careers out of Finance, I took 9 months off to study C++ full-time out of a book by Ivor Horton. I had a lot of support from my best friend, who is a guru, and I had been programming as a hobby since high school (I was 36 at the time).
It's not just the syntax that's an issue. The idea of things like pointers, passing by reference, multi-tiered architectures, struct's vs classes, etc., these all take time to understand and learn to use. And you're adding to that the .Net framework, which is huge and constantly evolving, and SQL, which is a totally different skill set than C#. You also haven't mentioned various subsets of the framework that are becoming more widely used, like WPF, WCF, WF, etc.
You're an academic so you can definitely do it, but it's going to take serious effort for a long time, and you definitely will need some projects to work on and learn from. Good luck to you.
According to Malcolm Gladwell, it will take you 10,000 hours to get really good. So get cracking.
Simple answer: a lot longer than two months. Learning to program competently will take longer than that, no matter what. It took me years to learn to be a competent object-oriented programmer, and I'm good at this stuff.
More detailed answers: it doesn't really matter whether you learn C# or SQL first, as they're very different. I'd probably suggest SQL, as it's easier to learn and more independently useful.
You will have a hard time getting used to the on-the-job realities at home, much as if you were studying plumbing or quantitative finance.
You're going to have a hard time putting all the information together without one or more projects you try to do. You're going to need to have other people to tell you when you're being stupid, when you're being overclever and will pay for it later, and when you're actually getting it.
Try to find an open source project you find vaguely interesting. Study their code. Figure out why they do what they do. Look at the bug list, and try to find something as trivial as possible to fix. Work from there. Learning to contribute is going to teach you things that are useful in the work world, and it will give you something to point at. It will be far easier to get your first job if you have some experience to point to.
All "relativity" aside, not fast. Based on the fact that you said you never programmed before...to become a basic programmer, a few years.
And to become a good to outstanding (using design patterns and industry recognized standards that relate to common standards as defined by ISO/IEC 9126 Standard such as testability, maintainability, etc.) programmer, it takes years of experience and coding often.. you do not become "Sr." or an "Architect" overnight and the same thing is true for a mid-level developer who doesn't code slop.
It's always a process where you improve. So learning is relative. But to learn the basics, seems simple until you start to design classes and interfaces. And even Leads stumble on the basics..doing things wrong. Everyone does. There is so much to be aware of.
If you're just going to be adding features (using classes your Lead or Architect has stubbed out for the team) and not really adding new classes, etc. it's easier....but you should take care in coding using standards and you still have to know complex areas of OOP. But that's not really OOP. When you start to creating classes, interfaces and knowing about inheritance, heap, references, etc. yada yada...and REALLY understanding it takes time no matter how smart you are or think you may be.
So, for a new programmer. Not easy. Be prepared to code a lot. And if you are not, find a job where you are. It's all about coding as much possible so you can get better.
Read these books FIRST. Do not dive into any others out there because they are not geared toward teaching you the language in a way you can get up to speed fast:
http://www.amazon.com/Head-First-Object-Oriented-Analysis-Design/dp/0596008678/ref=pd_bbs_sr_4?ie=UTF8&s=books&qid=1231280335&sr=8-4
http://www.amazon.com/Head-First-SQL-Brain-Learners/dp/0596526849/ref=pd_bbs_sr_7?ie=UTF8&s=books&qid=1231280335&sr=8-7
http://www.amazon.com/Head-First-C-Brain-Friendly-Guides/dp/0596514824/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1231280393&sr=8-1
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=pd_bbs_sr_3?ie=UTF8&s=books&qid=1231280393&sr=8-3
they will get you the fasted jump start into understanding, better than any books out there.
Also for these lame type of responses, ignore them:
"Then again, plenty of people (most normal people, non-programmers) never learn those subjects, so if you're like "most" people then the answer would be "it would take forever" or "it will never happen"."
Those come from developers (typically leads) who have some Ego trip that DON'T want you to learn. Everyone learns differently and at different paces and eventually you will become "fast". I get very tired of hearing Sr. developers say statements like this when their sh** also stinks many times no matter how good they are. Instead they should be helping the team to succeed and learn as long as their team is working hard to keep abreast and doing what they can on their own as well (not leachers).
Make sure you try to get a Jr. Level Developer position first...
2-3 months to learn the basics...no way. Unless you're gonna code spaghetti sure. Same goes for the 1-2 years. Spaghetti it is then..
Build on what you already know and have a look at lot of job adverts. E.g I have seen jobs asking for WinForms/WPF AND electronics for the writing of a UI to control a custom bit of hardware.
You may find the “robotics” .net toolkit interesting.
.Net is now too big for anyone to learn both WEB and Desktop so you have to decide the way you are going to go. Web has lots more jobs, but there are very few people with good desktop stills.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
My path to a 'fulltime'- developer stated as a analyst using VBA with Excel, Access, and then onto C#. I went to college part time once I discovered I had a passion for coding not business.
I do about most of my coding in C#, but being an ASP.NET developer I also write in HTML, JavaScript, SQL etc. . . the usual suspects.
I like to keep moving forward find the edge that will get me to the next level, the next job, and of course more money. Most importantly I just want to learning something new and challenge me.
I have spent time recently learning LINQ, but was wondering what should I learn next? Something on the .NET Framework or a new language technology?
If you want to be one of the best you need to specialise. If you become very good in many skills then you may never become truly excellent in one. I know because I have taken this route myself and have found it difficult to get employment at times. After all, who wants someone who is capable at many languages when there is someone who excels at the specific thing they need. If a company develops in C# then who would want someone who is OK at C# but also is good at C, Visual Basic, Perl and Cobol, when all they really want is the best possible C# developer for the money they can afford.
After all, you will only ever be employed for one, maybe two of your skills. There are very few jobs for people who are good in 10 or 15 skills.
If you are looking to a new skill then maybe check out the job boards and find which skills are particularly in need, but be aware that what is the flavour of the month this year may not even be on the scene next year, which will make all of that effort to learn the skill futile and wasted.
What I would say is:
do one thing, and do it well. This may include supporting skills (C#, ASP.Net, SQL, LINQ etc).
If you want to choose something else, then choose something complementary.
Possibly most importantly, choose something you will enjoy. Maybe Ruby on Rails is the current flavour of the month, but if you don't enjoy doing it, then don't do it. Really, it's not worth it. You will never wish, on your death bed, that you had worked more in something you didn't enjoy.
Another direction you could look at is maybe not for a particular development skill, but look for something else, maybe soft skills like people management, better business understanding or even look to something like literary skills to help improve your communications skills. All of these will help to allow you to do what you want to do more, and cut down on the stuff you really don't enjoy, thus helping to make your job more enjoyable.
Apologies for the waffling here. Hope you are still awake :)
Yeah, the more I get into software, I start to see myself focusing less on the language and more on the design..
Yeah there are framework bits we need to get our head around but most of the time ( most not all ) you can look those up as-and-when you need them..
But a good design head? That takes years of experience to start getting it working right..
And that is what the companies really pay for.. "Build it and they will come" and all that...
As you continue to gain more experience in ASP.Net, C#, etc - it's always good to go check out the competition and see if it sparks ideas on how you can do things better in what you're doing. Taking a look at something like Rails or Django might change how you look at designing or building your apps.
If you're now proficient with the languages and technologies you use, then start spending more time focusing on the design, solution architecture, and systems integration. The "bigger picture" that will set you apart from your contemporaries.
Check out some Martin Fowler books like "Patterns of Enterprise Application Architecture", or Eric Evans' "Domain-Driven Design".
Maybe learn more about Usability (best practices, testing, etc.) if you haven't already done so.
Steve Krug's "Don't Make Me Think" is a good book to start with. Jakob Nielsen always has interesting stuff as well.
The more languages you know, the more marketable you are. Look and see what the more popular (market for, not fan base) languages are, then add on some cutting edge tech that is not in much use yet, rounded out by general programming skill.
With your skill set I would recommend (as far as languages):
Java as a starting point
For .Net add in the .Net MVC (you have LINQ or that would be here also)
Language agnostic skills:
Design Patterns (includes the MVC)
Domain Driven Design
Test Driven Design
Here would be my suggestions:
1) Design Patterns - These are really neat as well as being very useful in some situations.
2) AJAX - Assuming you haven't already done some of this, it is an interesting part of Web Development from my view.
3) Determine which parts of the chain do you enjoy the most: Front-end work(HTML, CSS, Javascript), middleware(C# for business logic parts), or back-end(MS-SQL with stored procedures, indexes, triggers, and all that stuff). If it is all of it then try to stay where the team doing web development is small as otherwise you may be asked to choose.
4) Algorithm design and analysis - Do you know various sorting algorithms? Do you know various techniques to create an algorithm, e.g. greedy, recursion, divide and conquer, dynamic programming, using custom data types like heap in heapsort etc. This can be new and cool.
5) Determine if there is a part of the development process you favor: Analyst, designer, programmer, tester, debugger? All can have varying degrees of being near the code, IMO.
# Michael DSL=Domain Specific Language
As for what you should learn, that depends on what you're interested in.
Are you looking to challenge yourself while staying in the same medium (web-centric applications)? I would suggest learning about Apache and the LAMP (Linux, Apache, MySQL, PHP) architecture and challenge yourself to build a web application that you could readily build with ASP .NET using it.
Want to learn something completely different? Try Prolog or LISP and see what you can do with those.
Maybe you'd like to get into embedded software? Learn C to start.
You have a wide variety of ways to improve your skills, and each one has career paths attached to them. (Well, maybe not Prolog, but it's fun!)
Why don't you swap stacks and look at the LAMP stack?
Or how about a functional language like haskell?
Or write a DSL?
Or an app for your phone?