I have been in programming since primary 6. Since the time DOS comes, I have been doing programming in quickbasic 4.5, then to VB 6, then to C#. In between I also do programming in C++.

But every time I open Stack Overflow and trying to help others answering their problems, it seems that I know nothing. I feel that I am so stupid even I have been in programming for so long. I would shock reading all the questions and unable to find any clue.

Is technology moving too fast that left out me? I feel that technology changes too fast and I can't keep up, when I know ASP.NET web form, MVC is out, when I know MVC, android/iphone/HTML5 app is popular. It seems that I am chasing something and never reach 'it'.

I don't know whether this is correct place for me to talk about this. I just wish to listen to opinion like you, how do you think technology should grow instead of recreating language, adding bug here and there to let programmer figure it out, while big company share the solution among themselves. This is exactly how I feel.

The simple example is how do you think why doesn't Dictionary<> in .NET provide iterating the object using index? Why must we use Key or GetEnumerator(). Developer has to google and read wasted hour of hour of time to find pieces of hack code to use reflection to achieve reading from index. Where developer will keep it as collection and valuable code. HOwever when times come, everything changes again, developer has to find answer for new silly problems again!

Yes, I really hate it! I hate how many big companies are playing with the developer by cutting a big picture into small puzzle and messing it up and asking developer to place it together themselves. As if they are creating problems for us to solve it, so we are unable to grow upfront, we are being manipulated by those silly problems they have created. Another sample would how difficult to collect Cookies from CookieContainer without passing the URL, yes without the URL and I WANT to get all cookie in the cookiecontainer without knowing the URL, I want to iterate all. Why does micros0ft have to limit me from doing that?

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
If this question can be reworded to fit the rules in the help center, please edit the question.

Because programming is a very large subject area. There's always something new to learn; isn't that exciting? Don't sweat it; just keep learning. Study fundamental programming concepts; those never change. Read language specifications. Study other people's code. Above all, write your own code. See also programmers.stackexchange.com/questions/55373.
–
Robert HarveyNov 30 '12 at 16:29

1

I've been doing this stuff professionaly for over 25 years and I still feel like this. Entire bodies of knowledge have come and gone in that time. There are piles of new stuff headed towards us and I know that 10 years down the road we'll be clearing up the mess we made today.
–
JaydeeNov 30 '12 at 16:37

Programming is not math. Math is about facts. Programming is about getting shit done. Your keyboard is optimized for a typewriter. If you cannot handle the reality then perhaps you should become a pure mathematician / philosopher. Ultimately life is pointless. Whether you are unconditionally happy is mostly up to you.
–
JobNov 30 '12 at 16:41

3 Answers
3

The simple example is how do you think why doesn't Dictionary<> in .NET provide iterating the object using index?

This is, to be honest, perfectly obvious if you have any sort of computer science background, and even for someone that has been programming as long as you say you have been.

So in the end, you probably think you know less than others because you do.

If I had to guess, your issue comes from learning how to do things rather than how things work. Once you know how associative data structures work, it's pretty apparent why you cannot iterate over them efficiently. If all you know is that you can do the same things with them as you can with lists, then it's not.

Once you have knowledge, you can extrapolate other knowledge. When all you know is recipe, all you can do is follow the recipe.

Maybe you are right. I do know that my fundamental is not that strong. For example dictionary might take key to hash it to get the memory area of where the data should be stored. So it is ineffective to index it? Is that correct? May I know is java capable to do that?
–
John KenedyNov 30 '12 at 16:49

@JohnKenedy - No. By definition, if an underlying data structure has fast lookups, it cannot also be efficient with respect to memory usage and iteration.
–
TelastynNov 30 '12 at 16:55

@Telastyn that last comment was a strong statement and frankly I think it could be wrong. Care to elaborate?
–
JobNov 30 '12 at 17:34

@Telastyn consider the LinkedHashMap of java which does have fast lookups and also fast iteration.
–
MichaelTNov 30 '12 at 19:43

@job - Yup, it probably is wrong as an absolute. For LinkedHashMap - it appears as though it contains both the doubly linked list and the table, being inefficient on memory. But the general principle that fast lookups are a tradeoff against memory usage and/or ordered iteration is a common one across all languages.
–
TelastynNov 30 '12 at 21:16

First, I'd like to start from the premise that there is no perfect tool for any job.

I arrived here from a very different path from you. The web first became available when I was in university, and I was immediately hooked making websites on Tripod and Geocities, with no training whatsoever in CompSci. As time went on, it became necessary to get involved with CSS, JavaScript, SEO, PHP, Perl, then Python and Ruby. Then I had to learn how to administer Linux servers. I thought this was stretching horizontally, but I enjoyed the work, and learning Linux was a joyful experience for me. Then came jQuery, HTML5, mobile development, iPhone and Andriod apps, .NET, C#, OOP, MVC frameworks, responsive design, node.js, backbone.js...and my head started spinning - web development was forcing me to learn actual programming! I started to feel lost - after all, I'm no C or C++ guru. But I've come to realize I know what I know really well, and that's delivering web solutions. The programming skills have slowly come along, out of a mix of necessity and curiosity.

There is a balance between sticking to your strengths and branching out. I know I'm not going to hop on Stackexchange tonight and answer questions about bitwise operators or pointers. Maybe I never will.

But at the end of your question you said something really important. You realize the flaws in the tools you're using. I think this is a sign that you're in a good place. Where do you go from there? Keep working around those flaws, or find a way to make better tools? It sounds to me like you're on the edge of taking that next step, so I'd say go for it.

John -- as gratifying it is to dish out new software and see it being used productively and satisfactorily by the end user, software development, due to the ever evolving nature of technology, is, in the parlance of our times, a very high-maintenance occupation as you must constantly be sharpening your edge in and out of work in order to remain competitive. Most other technical fields are probably less so, e.g. civil engineering, and some are perhaps even more, not that I can think of any.

I have felt your sentiment before -- been in jobs where I was using outdated technologies and where I wasn't learning much to brace me for the next gig. I suppose most programmers have. I find that most of my peers who are masters of one technical discipline or another, spend a lot of their time off work reading work-related books, developing their own applications and learning new technologies, i.e. almost do not have a life. However, I prefer not to spend my time off work doing programming as I have hobbies, numerous interests, home improvement, social life etc. So the best way to keep your skills up is indeed to be very meticulous in searching for a job which will provide you with an on-the-job opportunity to continuously sharpen your edge. It is, however, not always easy to land such an opportunity but in some locales it is easier than in others.

It is a matter of professional growth and maintenance vs. lifestyle and it is not easy to always establish an equilibrium. Personally, I like what I do but I still do not live to work but the other way around. You have to know your priorities.