TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

What is the best way for a non-CS major to obtain credibility as a programmer?

26 点作者 ecounysis超过 14 年前

14 条评论

kenjackson超过 14 年前
Ship code. Most developers get that CS isn't programming. Programming is much more of a vocational skill, w/o the negative connotations that go along with it. It's really a lot more dependent on what's hot right now and a lot less concerned about first principles.<p>Your average computer scientist doesn't really care about refactoring, or design patterns, or dependency management (unless you happen to research that field -- and notice that everything I listed is in the software engineering subdiscipline -- pretty much every other subdiscipline in CS is completley uninterested in the programming flavors of the month).<p>For most professional dev shops knowing a particular technology well (patterns and such included) is more important than being well versed on most aspects of computer science (whether theory, algorithms, ai, programming languages, architecture, compilers, discrete math, etc...).<p>So learn something well enough that you can ship/deploy/launch a good product based on it, and do it.
评论 #1878364 未加载
philwelch超过 14 年前
Turns out, it's the same as the best way for a CS major to obtain credibility as a programmer. All you have to do is major in CS to know how much variability in talent there is among CS majors.
loginx超过 14 年前
The best way would probably be to expose your work by contributing to open-source projects. You can either start your own project if you have an idea of something that could be useful to others, or join an existing project.
wccrawford超过 14 年前
Program. Anything.
评论 #1877789 未加载
mansr超过 14 年前
The best programmers I know have EE degrees. Just saying...
评论 #1878402 未加载
评论 #1877764 未加载
评论 #1877843 未加载
gsivil超过 14 年前
I would guess(not all of them necessary of course):<p>- Build something good enough to be proud to put it online<p>- Maintain a technical blog<p>- Get a job in a small software company and use this as a step and a credibility-maker, after that you will be part of the CS-certified folks by official experience<p>- Do not think much about not majoring in CS<p>Good luck
epo超过 14 年前
Write good code. Let people (whose opinion will confer credibility) see it.
bialecki超过 14 年前
Attention to detail. Do the little things well and be consistent. Just remember, talk is cheap, build stuff.<p>Also, keep learning. There's always more to learn.<p>This coming from a guy who was a Physics major, took a few beginning CS classes in college, and then just jumped in. If you want to be good, you'll get there.
protomyth超过 14 年前
You can do the modern "hey I can do this!" by getting a program you wrote onto an app store (confirmation provided by good ratings and sales).
kamechan超过 14 年前
i could really write quite a bit about this. i'll try not to and instead attempt to be concise.<p>i wasn't a cs major before either. 2 years ago i set aside a quite successful consulting business i'd started to go back to school as a 30-something self-taught industry programmer and "fill in the gaps" so to speak.<p>let me say that a good cs education makes a night and day difference to being self taught. even if you're rather good. sure there are very good self taught programmers and while, of course, i'm self-deprecating and don't consider myself one, i've known quite a few. and sure there are also a lot of hacks in university CS programs, even the good ones though relatively fewer the better the program. i'm surrounded by lots of people who i stupidly judged as "beneath me" at first, because of all my so called industry experience, but 90% of them continually surprise me with their ability to solve very complex problems under very non-negotiable deadlines.<p>i thought i knew something when i went back to school. indeed, this actually caused me quite many problems at first because i tended to rely more on what i knew than what was being taught. but i reached a point rather quickly where my industry experience wasn't going to help me at all, and in fact actually hindered me because there was much i'd learned incorrectly.<p>but that's why i went back to school. so i threw much of what i'd accumulated over the years out the window.<p>i was previously a math major, but even doing the required CS discrete math, number theory, combinatorics, probability, set theory, formal logic, etc. introduced me to ways of thinking about math i had not previously seen. i think this is where a bit of rigor in the program one selects helps. some cs curricula will just gloss over these details, but at a huge disadvantage to the students because a really good understanding of a worthwhile algorithms book (cormen, leiserson, rivest, stein, for example) requires them. there's a big difference between doing something (i.e. writing code) and doing something well (writing purposeful code that is an elegant expression of some theoretical model).<p>a solid basis in algorithms is an immensely useful thing. even if it all just seems like "theory" at the time.<p>why? because i can understand most research papers or published documents i read now without having to look things up. or when i have to look something up because i don't know the answer, i generally know the right direction to look in. or i can look at someone else's code and see that they have actually chosen the wrong data structure for accomplishing a task, leading to a vastly inefficient algorithm. or, more importantly, framing the problem in the right graph-theoretical model and, as a result, exposing a richness in the data that i'd not known to exist previously. my first taste of this was the famous four-color theorem. from there i was hooked.<p>...and that was just the first year of being in school. it's also worth pointing out that year i really started to realize the importance of being able to rigorously prove the correctness of each step of an algorithm. though a lot of proofs are those by construction where one essentially describes building the model as the proof, some loop invariants or algorithms must be proven inductively for one to have any certainty about them. indeed, i now believe this was a critical skill to develop. proving the correctness of things improves one's ability to think clearly.<p>interestingly, in my free time i often consider how my education has affected my old development patterns. it might seem that with all this extra formalism that i now sit down and plan everything out before writing even one line of code, harkening back to the old rational-rose way of doing things. to put this to the test i've done a couple side projects in the last couple years and found that my development style was about the same as it was previously: start with an idea, address the nagging issues with implementing it, build a quick (but refactorable) prototype, test the hell out of it, and revise it until it all works. the thing is that in those interim steps i'm drastically more competent now than i was before. when i get stuck on something i can often get unstuck quickly by reasoning my way effectively out of being lost in the forest, and with the tools i have (and paradigms i have access to) if i absolutely must write my own solution from scratch, it's generally written well. and if it's not, it's usually because i didn't understand the problem i was trying to solve ... not the particular coding technique i was trying to solve it with.<p>so other activities (non-chronologically) were things like writing operating system components, replacing parts of the java collections framework with probabilistic data structures or building our own red/black trees, designing chips, writing an embedded system or microkernel, creating oCaml/scheme/haskell parsers and REPL's, building C++ as stroustrup first did (by doing lots of plumbing with void pointers in c), designing new DSL's, spending hours on theory of computation proofs and decidability, implementing the viterbi algorithm for a speech recognition system and other wondrous dynamic programming problems, binary and stereo vision, distributed/parallel computing, and the list goes on...<p>it has all built on the foundations we laid in the first few courses. had i skipped those parts, my solutions would have been less elegant and less correct, if i'd even been able to understand the problems well enough to solve them. and it also has the unanticipated side-effect of my having an intimate understanding of the beauty of the chain of ideas that has led us to this point in technology.<p>of course i'm hoping that all this work results in less loathsome cruft. i look at code i'd written from 5 years ago and shudder. some of it was quite clever but, on the whole, also quite naive.<p>ok, so i wasn't as brief as i'd intended to be. the main point is: you can have a great career as a self-taught programmer. i did previously. if you really love cs material, why not study it formally? if you have the opportunity to go back to school and do it, even if you're older or even if you have to do it part time, it will be extremely rewarding. and if it advances your personal "state of the art" and contributes to your passion, chances are it won't be a waste of time.<p>of course there is an opportunity cost...the money you won't be making when you're in school and the nagging thought that "what if you were on the path to building the next tech revolution and you veered far in another direction to go back to school". i'm afraid my opinion is totally useless here. for going back to school was life-changing to me in many ways beyond cs knowledge. there is much virtue in living a simple existence continually engaged in the pursuit of knowledge. maybe it's just my personality, but i'd say "veer away".<p>...<p>edit: i'd just like to add that i'm not trying to insult self-taught programmers here by any means. at the end of the day, i wholly believe that it all comes down to deliverables.<p>i mainly wrote this to communicate my own experiences when i asked myself a question similar to the original topic of the thread.
评论 #1878378 未加载
评论 #1878285 未加载
评论 #1878143 未加载
SkyMarshal超过 14 年前
Read the best books. OP already referenced SICP and TAOCP, so it sounds like he's on the right track.
评论 #1877839 未加载
durbin超过 14 年前
make something.<p>preferably something you can send people a url for or something you open source on github.
sp4rki超过 14 年前
1) Github 2) Ship code 3) Blog about code
mkramlich超过 14 年前
I think the question suggests the obvious and rather simple and effective answer: by programming. Make software. Get it out there. Learn more. Get better. Repeat.