theory - When is theoretical computer science useful? -
in class, learned halting problem, turing machines, reductions, etc. lot of classmates saying these abstract , useless concepts, , there's no real point in knowing them (i.e., can forget them once course on , not lose anything).
why theory useful? ever use in day-to-day coding?
when graduated college, assumed on par else: "i have bs in cs, , lot of other people, , can same things." discovered assumption false. stood out, , background had lot it--particularly degree.
i knew there 1 "slight" difference, in had "b.s." in cs because college 1 of first (supposedly #2 in 1987) in nation receive accreditation cs degree program, , graduated in second class have accreditation. @ time, did not think mattered much.
i had noticed during high school , in college did particularly @ cs--much better peers , better many of teachers. asked lot, did tutoring, asked research project, , allowed independent study when no 1 else was. happy able help, did not think difference.
after college (usafa), spent 4 years in air force, 2 of applying cs degree. there noticed few of coworkers had degrees or training related computers. air force sent me 5 months of certification training, again found lack of degrees or training. here started notice difference--it became totally obvious many of people encountered did not know doing, , included people training or degrees. allow me please illustrate.
in air force certification training total of thirteen people (including me). air force officers or equivalent, had bs degrees. in middle based on age , rank (i o-2 amongst 6 o-1s , 6 o-3s , above). @ end of training, air force rubber-stamped equally competent acquire, build, design, maintain, , operate computer or communication system part of department of defense.
however, of thirteen of us, 6 had form of computer-related degree; other 7 had degrees ranging aeronautics chemistry/biology psychology. of 6 of cs degrees, learned 2 had never written program of kind , had never used computer more casually (writing papers, playing games, etc.). learned 2 of had written 1 program on single computer during cs degree program. 1 other person , myself had written more 1 program or used more 1 kind of computer--indeed, found 2 had written many programs , used many kinds of computers.
towards end of our five-month training, our class assigned programming project , divided 4 groups separately undertake it. our instructors divided class in order spread "programming talent" fairly, , assigned roles of team lead, tech lead, , developer. each group given week implement (in ada) full-screen, text-based user interface (this 1990) flight simulator on top of instructor-provided flight-mechanics library. assigned tech lead team of four.
my team lead (who did not have computer degree) asked other 3 of divide project tasks , assigned third of them each of us. finished third of tasks middle of first day, spent rest of day helping other 2 teammates, talking team lead (bsing ;^), , playing on computer.
the next morning (day two), team lead privately informed me our other 2 teammates had made no progress (one not write "if" statement compile), , asked me take on work. finished entire project mid-afternoon, , team spent rest of day flying simulator.
the other guy comparable cs degree assigned tech lead team, , finished end of day three. began flying simulator. other 2 teams had not finished, or made significant progress, end of week. not allowed other teams, left @ that.
meanwhile, middle of day three, had noticed flight simulator seemed behave "wrong". since 1 of classmates had degree in aeronautics, asked him it. mystified, confessed did not know made plane fly!?! dumbfounded! turns out entire degree program safety , crash investigations--no real math or science behind flight. on other hand, had maybe minor in aeronautics (remember usafa?), had designed wings , performed real wind tunnel tests. therefore, quietly spent rest of week rewriting instructor-provided flight-mechanics library until simulator flew "right".
since then, have spent 2 decades contractor , employee, doing software development plus related activities (dba, architect, etc.). have continued find more of same, , gave on youthful assumption.
so, have discovered? not every 1 equal, , okay--i not better person because can program effectively, more useful if need me. learned background mattered: growing in family of electricians , electrical engineers, building electronics kits, reading literally every computer book in school/public libraries because did not have access real computer, moving new city high school did have computers, getting own computer gift, going schools had computers of many different sizes , kinds (pcs mainframes), getting accredited degree engineering school, having write lots of programs in different languages on different kinds of computers, having write hard programs (like own virtual machine custom assembly language, or huffman compression implementation, etc.), having troubleshoot myself, building own computers parts , installing software, etc.
ultimately, learned abilities built on foundation of knowing how computers work electrical level on up--discrete electronic components, circuitry, subsystems, interfaces, protocols, bits, bytes, processors, devices, drivers, libraries, programs, systems, networks, on massive enterprise-class conglomerates routinely work on now. so, when damn thing misbehaves, know how , why. , know cannot done can. , know lot has been done, has been tried, , left relatively unexplored.
most importantly, after have learned that, have learned don't know damned thing. in face of there potentially know, knowledge miniscule.
and quite content that. recommend try.
Comments
Post a Comment