The Communications of the ACM recently had several development articles, and I found the one on static analysis tools at Google particularly interesting. The article works through how Google went about integrating static analysis tools into every developer's workflow. And the tools have to be in the workflow, or developers will "forget" to use them. The second problem with the tools is ensuring that the feedback is useful. Currently, each dev will mark the items as either useful or incorrect. If a tool exceeds a 10% false-positive rate, it is temporarily disabled until that tool's developers can fix the flagged issues. The third issue with the tools is that some are expensive. Depending on the type of static analysis, the time required may be significant. Thus the tools are classified into two camps: on each compile, or on each code review / commit. It is also important that some tools can be temporarily disabled, such that during debugging or refactoring the code may temporarily mutate into an "unsafe" state to simplify the process.
Personally, I am glad that they are integrating analysis tools into the development workflow. Much work has been done to find bugs and issues within source code, so it is good that these analyses can be utilized regularly to improve code quality.
(As a note, I do not nor never have worked for Google, so I can only write based on the ACM article and not personal experience.)
A discussion of how to do Computer Science well, particularly writing code and architecting program solutions.
Showing posts with label software engineering. Show all posts
Showing posts with label software engineering. Show all posts
Wednesday, May 16, 2018
Thursday, June 30, 2016
Computer Scientists and Computers Usage
This post is built on a discussion I had with Dr. Thomas Benson and the recent blog post by Professor Janet Davis, I've got a POSSE. Less directly, Professor Mark Guzdial has written several recent blog posts about parents wanting CS in high school, most recently this (where the point is raised that not everyone knows what this is).
What is it to be a computer scientist? Is it just software development? When I was first looking at colleges and I knew I wanted to program, I saw three majors that seemed appropriate: Computer Science, computer programming, and game development. And from my uninformed perspective, Computer Science (CS) initially seemed the least applicable. This was before Wikipedia, so how would one know what CS is?
Michael Hewner's PhD defense was a study of how undergrads perceive the field, as they learn and progress through the curriculum, do their views change? I know my views changed; for example, functional programming was a complete unknown before matriculating. By the completion of my undergraduate degree, I perceived that Computer Science has three pillars: systems, theory, and application. I still view CS primarily from a programmer's lens and not a big tent view.
Indirectly, the Economist wrote about Programming Boot Camps where college grads go back to get a training in programming; however, "Critics also argue that no crash course can compare with a computer-science degree. They contend that three months’ study of algorithms and data structures is barely enough to get an entry-level job." I both agree and disagree. There is a further transformation of the economy coming whereby workers will . One PL (programming language) researcher recently estimated that Excel is the most common programming language. Can the worker using Excel do more or do it faster with VB or python or ...?
Are there nuances to the study of Computer Science in which students can focus further? Clearly there are with the mere presence of electives. Georgia Tech even groups similar electives into "threads". Besides just electives, under a programmer-centric view of CS, software development involves more than just the strict programming aspect. Even if CS is the "programming", a written program requires software engineering to maintain and manage its development and designers to prepare the UI (etc).
Thus CS might evolve more toward having a pre-CS major, and after the first two(?) years, students can then declare as Computer Science or Software Engineering or Human Computer Interaction or .... So this is both less and more than Georgia Tech's threads, but an approach with similarities. In common, this development of CS major(s) balances a concern of whether students have the fundamentals to succeed in areas related (i.e., programming, software development, and design) to their actual major, while allowing some greater depth and specialization.
This step is a maturing of the discipline. No long just one major, but a school of majors. CMU offers BS in CS, along with three other interdisciplinary majors. Georgia Tech offers CS (with 8-choose-2 threads) and Computational Media. Rose-Hulman offers both CS and Software Engineering. (I am only citing the programs that I know about, not an exhaustive list).
What is it to be a computer scientist? Is it just software development? When I was first looking at colleges and I knew I wanted to program, I saw three majors that seemed appropriate: Computer Science, computer programming, and game development. And from my uninformed perspective, Computer Science (CS) initially seemed the least applicable. This was before Wikipedia, so how would one know what CS is?
Michael Hewner's PhD defense was a study of how undergrads perceive the field, as they learn and progress through the curriculum, do their views change? I know my views changed; for example, functional programming was a complete unknown before matriculating. By the completion of my undergraduate degree, I perceived that Computer Science has three pillars: systems, theory, and application. I still view CS primarily from a programmer's lens and not a big tent view.
Indirectly, the Economist wrote about Programming Boot Camps where college grads go back to get a training in programming; however, "Critics also argue that no crash course can compare with a computer-science degree. They contend that three months’ study of algorithms and data structures is barely enough to get an entry-level job." I both agree and disagree. There is a further transformation of the economy coming whereby workers will . One PL (programming language) researcher recently estimated that Excel is the most common programming language. Can the worker using Excel do more or do it faster with VB or python or ...?
Are there nuances to the study of Computer Science in which students can focus further? Clearly there are with the mere presence of electives. Georgia Tech even groups similar electives into "threads". Besides just electives, under a programmer-centric view of CS, software development involves more than just the strict programming aspect. Even if CS is the "programming", a written program requires software engineering to maintain and manage its development and designers to prepare the UI (etc).
Thus CS might evolve more toward having a pre-CS major, and after the first two(?) years, students can then declare as Computer Science or Software Engineering or Human Computer Interaction or .... So this is both less and more than Georgia Tech's threads, but an approach with similarities. In common, this development of CS major(s) balances a concern of whether students have the fundamentals to succeed in areas related (i.e., programming, software development, and design) to their actual major, while allowing some greater depth and specialization.
This step is a maturing of the discipline. No long just one major, but a school of majors. CMU offers BS in CS, along with three other interdisciplinary majors. Georgia Tech offers CS (with 8-choose-2 threads) and Computational Media. Rose-Hulman offers both CS and Software Engineering. (I am only citing the programs that I know about, not an exhaustive list).
Subscribe to:
Posts (Atom)