4 ms·
Thats a good question - I can't really articulate it well, but here's an attempt. (a) Design / Scaling: I guess I like solving small coding problems that trans
by confusedgeek 11y ago
Thats a good question - I can't really articulate it well, but here's an attempt.
(a) Design / Scaling: I guess I like solving small coding problems that translate math or logic into code. It is building software at a non-trivial scale that bothers me - anything that I've designed that was over 2000 lines was fugly code, and I can find numerous design flaws with the code I write and all the alternatives to it. At the end of my work assignments I am often dejected thinking - "I can't ever design something non-trivial cleanly."
(b) Not being as good with new frameworks/tools: I am a loyal C/vim/shell person, no IDEs. I am very efficient at my shell+Vim development environment (which was shoved into me in school when I didn't have a choice), but I shy away from trying anything new because it feels unnatural or scary.
- confusedgeek 11y agoTo add to that, reading new code is unnatural too. So far in my career, I've only built new things, and refined them based on my colleagues' input. But unlike my colleagues, who can dive into a piece of software and augment/change it adhering to the style of it, I am usually lost with any code that I didn't write.
- jononor 11y agoUnderstanding other peoples code, and coding in 'their style', requires experience too - so if you don't have a background in it, not strange you find it hard. If you think it a worthy goal to become good at it, best way is to do it more. Otherwise, stay to something you like and do well.
- AnimalMuppet 11y agoI'm tempted to say that you'll get better at it with more experience, but... I'm not happy with the design of my part of my current project, either, and I've been doing this for thirty years. (You will get better at design with more experience (and more input from good software designers). I'm way better at it than I was in my twenties. But there's still plenty of places that I'm not satisfied with the design.) Are you by any chance a perfectionist? There always will be places to improve your designs, especially if you're a perfectionist. Part of the answer is to not be such a perfectionist. You can scale perfection (or almost perfection) up to a point, but not beyond; 2000 lines seems like reasonably close to the breaking point. Everybody's more comfortable in their preferred environment. Learning a new set of tools is not fun, because you're less effective than you would be in your normal environment, and you know it, and you compare your clumsiness with the new tool to how well you can do with the old one. But you sound like a pretty smart person, and you should be able to learn new things pretty readily. It sounds like you're unwilling to ride through the phase of uneasiness, of I-don't-know-how-to-do-anything-with-this-stupid-new-tool, of feeling dumb and clumsy, for long enough to become proficient. Look, I don't like having to do that, either. I usually kind of resist doing so for a while. But don't let it stop you from learning new stuff; whatever you go into, you're going to have to do that.
- confusedgeek 11y ago"It sounds like you're unwilling to ride through the phase of uneasiness, of I-don't-know-how-to-do-anything-with-this-stupid-new-tool, of feeling dumb and clumsy, for long enough to become proficient. Look, I don't like having to do that, either." Many thanks for this - this is a great analysis, followed by just the reminder I needed. With this in mind, I will force myself to learn a couple of new things. I guess if I do that often enough, I'll have enough data-points to prove to myself that something that was once unknown and made me feel dumb can become a power tool.
- chrisbennet 11y agoI'm not saying you shouldn't force yourself out of your comfort zone, but perhaps you could try this: Find a fun problem and solve it with the new tech/language you are trying to learn. It a lot easier when "fun" drives your efforts instead of forcing yourself to do something. As for feeling dumb when learning new things; you may have to accept that no amount of experience/data point will let you "prove to yourself" that you will be good at a new challenge. My software engineer/wife/best friend pretty much rocks at every job she's worked at. I've lost track of how many times she's told me "I don't know if I can do this job." when she starts a new job. She's been going through this cycle of new job=>self doubt=>mastery multiple times for over 2 decades and she still feels that way. Apparently, no amount of data points will dispel that feeling for some people.
- d4rkph1b3r 11y agoThis may seem like a weird request, but let me know what you think about this quora answer: http://www.quora.com/Reviews-of-Haskell-programming-language http://www.quora.com/Reviews-of-Haskell-programming-language
- confusedgeek0 11y agoThanks. I am guilty of being intrigued by 'Learn you a Haskell for great good' that a colleague kept as a prized possession on his desk and not following up and learning it. I know what I am doing this weekend.
- codygman 11y agoA lot of really great stories in there. From Tikhon Jelvis' answer: "I personally rank languages on three largely orthogonal axes: productivity, maintainability and performance. That is: how quickly, comfortably and efficiently I can write code; how easy it is to ensure the code is correct, refactor it and add features; and how fast the resulting code can run. For different projects, the different axes will have different weights. If the weights are about equal, Haskell is the best choice. Moreover, I do not know any language that can beat Haskell along any two axes: sure, there are (in fact, many) languages that perform better, and there are languages that lead to more correct, more maintainable code, and there are even languages that are more productive. But never more than one at a time." I totally agree with the above and it's why I think Haskell is the best general programming language out there. I see it as the same niche as python, ruby, lisp, C#, Java, Go, etc.
- lastofus 11y agoYou mention you are a loyal C developer. As someone who learned C as my first language and used it for years (along with C++ and Java), I found I enjoy programming significantly more when I'm using an expressive high level language like Python. When it becomes 10x easier to express complex ideas and algorithms with a fraction of the code by making use of built-in language features, it's a breath of fresh air. The huge ecosystem of easy-to-use libraries for most anything doesn't hurt either. I can enjoy focusing on the problem I'm trying to solve instead of how to structure my code, what design pattern I should be using due to a limited static type system, how best to avoid memory corruption or seg faults, etc. It's akin to writing pseudo code, and then having it execute. Another great thing about Python in particular is that it ends to be extremely easy to read other people's code due to semantic whitespace and also by language design of there only being one way to do things. If Python turns out to be your thing, it's popular in data science/machine learning. If you lean in that direction, you may be able to work more on some complex math/stats problems and less on writing/maintaining large low-level codebases. Also, that feeling that your code is not perfect is really common. I've been programming for ~20 years and it has never gone away. What's helped me a lot is focusing on the end result of the product, and its impact on the business and the value it creates. As someone who wants every line of code to be error free, as performant as possible, and properly structured, I find comfort knowing my "good enough" solution (and sometimes not-so-good solution) is making business owners and end-users more than happy.