views:

216

answers:

7

I'm a 2nd year computer engineering student in Ethiopia, Africa. We have taken C and C++ and i've taught my self HTML, CSS, PHP(cakePHP framework too) and little javascript, JQUERY and mySQL to develop small systems just like blog. But I want to build large systems that are secure and robust. I am very humbled to see very smart and experienced developers here in SO. I'm vacillating as to which to follow at the start ie(ASP.NET or PHP) and what other languages or systems should I learn to make that happen. Thanks in Advance.

PS. I can handle any type of Mathematics.

+5  A: 

I feel like an old man for saying that, but in time, you will realise, the two biggest challenges in software development are:

  • Code reuse - Being able to write code, that is reusable. It's not even obvious for code to be reusable over time within the very same software it was written for. It is very likely, that when opening code you wrote a while back, you'll facepalm yourself after having wasted a few hours trying to modify it and decide not to reuse it in the next version of the software, but to make a rewrite. It is a true art to write code, that can be reused and likewise, it is a true art to reuse code. Software developers always want to to rewrites and to reinvent the wheel. It's fun. But it won't get you very far.
  • Actual use - It is not obvious to write software, that is of use. Because software developers have completely different expectations of software, than the users of their applications. We tend to overengineer, overoptimize and overcomplicate things, to put in too many features, to consider too many what-ifs. We prefer focusing on the interesting parts, rather than getting our hands dirty with good user interfaces or other boring, time-consuming and unrewarding problems. We produce a lot that nobody wants to or is able to use.

How does that answer your question?

  • Code reuse: You imperatively need to master this. Get acquainted with many libraries and frameworks. Design an application and then try to plug it together using existing components and architectures. Writing glue code is the hardest and most important task. Also, in your aspiration towards creating such a large system, single out the seperate tasks of the system and try writing your own components aimed at those single tasks. Try to make each of them robust and reusable. Don't try to build a whole system at once. You will fail. You'll probably learn something, maybe a lot, but you'll fail (or you're a freaking genius).
  • Actual use: Well, it's very ambitious wanting to create something as large as PayPal, but try not to create something big. Try to create something good. Good in that it is usefull, usable and used. You'll see in time, that's hard enough. Try to create something, that others use and are happy with.

Focus on getting better at those two. Choose whatever libraries/frameworks/platforms/languages you like and deem fit to fulfill your tasks. IMHO PHP is not a good language to stick with, for a number of reasons, but in the end, you should use what you like and feel good with. I personally use haXe for my projects. You might wanna give it a try. In the end, I think you should try many languages and frameworks to get a grasp of different concepts. Most things you will learn, transcend concrete languages and frameworks, but you can only learn them, by getting to know some of them really, really well.

Before finishing, I would like to point you to my 5 commandments ;)

greetz
back2dos

back2dos
+1  A: 

I think it's not a question of language or systems. If you are a good programmer you will easily adopt and accommodate to any sort of programming language or framework there is.

For the kind of system you want to program, there are many frameworks to consider. all with their pros and cons. I would suggest you to try to learn from people who have done it before, see what the big companies use, and study more.

slhck
+2  A: 

PayPal did not start out large - it grew large over time because they were successful. And they did not become successful because of a particular choice of platform. They were successful because of their business model, because of the services they provided and the customers they've attracted.

So learn either ASP or PHP or both. They're about equally useful for a programmer. And about equally capable of backing highly scalable systems.

Seva Alekseyev
I'm really comfortable with PHP. Is it really capable as ASP.NET? Because it's not compiled I feel like it can't some of the things ASP does.
Alexander Suraphel
PHP and ASP provide slightly different perspectives. ASP.NET, with its separation of code and HTML, lets you build big and yet maintainable systems; PHP code tends to get out of control with size. On the other hand, PHP lets you get some results very quickly.
Seva Alekseyev
+2  A: 

Start with what you know. The large problems you are seeing are really a distraction for someone starting from scratch.

  1. Find a problem that people need a solution for
  2. Write the simplest thing that can work using what you already know
  3. Keep making it better
  4. Worry about scaling later
Kelly French
good idea. I worry to much about scaling now.
Alexander Suraphel
+2  A: 

Large systems are all about coupling between components and testing.

Courses like "software architecture" and "software engineering" are supposed to be good at teaching you how to design systems (getting coupling and communication between components right). I was a bit disappointed with my university's take on this but it'll help you think about the right kind of things at least.

Then for testing, start looking at a test driven development methodology. Test coverage is very important where robustness and security is a concern.

Finally, I might even recommend looking at Haskell if for no other reason than to get into your mind into a more "formal" mode of operation. Haskell more or less forces you be more formal about how you express problems through its type system. (Also, if you really like advanced math you'll probably love haskell :))

Rehno Lindeque
thank a lot. that was helpful.
Alexander Suraphel
A: 
  • If you intend to develop a project alone, PHP is fine
  • If you need to build a team of developers, I would advise Java

Besides the language, don't forget the SSL / encryption / security part.

Paypal, like all payment systems, need a strong security plan to be implemented in order to ensure (as much as possible)

  • the server is who he pretends to be (certificate signed by a know authority)
  • the data cannot be (practically) spied on the way browser <-> server

See HTTPs, SSL

ring0
I'll check those things out.
Alexander Suraphel
+2  A: 

There are two goals here. Tackle them individually:

Building large complex systems:

Large complex systems come about as a result of two things:

  • A vision for some product or service that is useful and appeals to a large market
  • A business plan to get from ground zero to fulfilling your vision

Accomplishing this may mean partnering with other people. Clearly, you are interested in the technical side of things - this is your strength. You may need to find other people who share your vision to help manage the non-technical side of things. This would include stuff like raising capital, promotion and marketing. Each member of your group should bring in a different core strength.

As a technical leader, you need a firm grasp of application architecture. This is less a nuts-and-bolts programming skills issue than it is understanding how various design patterns and technologies can be leveraged to achieve your goals. Learn a bit about as many frameworks and design patterns as you can. You don't need to become an expert on any one of them until you have a feel for the strengths and weakness of each with respect to the application you are looking to build.

Building general CS skills

Theory never goes stale. Obtain a strong background in the science side of your computer engineering program. Take courses on language theory, discrete mathematics, algorithm design/analysis, computer architecture, application architecture etc. These will serve you well for the rest of your career.

Then there is the practical side of the issue: Which languages, technologies and frameworks should you learn about now to leverage your career (with the hopes of doing something really big). To this end you are already on the right track. Be curious, expose yourself to as many tools as you can. The more things you know, the easier it is to learn new ones. Take the time to understand the model each tool is based on and how it is similar to but different from other tools you have used.

Keep in mind that programming languages are just the "tools of the trade", not the trade itself. Over time you will find new tools and discard others.

Putting it all together

Let your imagination work on coming up with that "killer app". Make friends with people having skill sets complementing your own. Talk and dream about big things together.

Work on developing your core CS skills

Gain some exposure to as many different tools and languages as you are comfortable with. Obtain a good working knowledge of just the few that you find most useful to whatever you are doing at the moment. Gaining a mastery of any one tool may take years, but let your current needs be your guide. Be prepared to let your technical tool set evolve over time.

NealB
This is by far the best answer I received. Thanks a lot NealB!!
Alexander Suraphel