Want to build a compiler?

Interested in working for Microsoft? Want to build a compiler? Want to work on the coolest programming language ever? The Visual Basic compiler development lead position is open and we’re looking for someone with the right stuff to fill it:

Microsoft Visual Basic is used by millions of developers worldwide, and is widely acclaimed for both its power and ease-of-use. As the next Development Lead of the Visual Basic Compiler and Editor team, you will be the guiding hand behind the development of the next version of Visual Basic’s powerful programming language. Data/Language integration -LINQ-, advanced IntelliSense and other editor features, and an enhanced runtime library are just a few of the exciting features that you will be driving as you lead a team of highly motivated and experienced engineers. As Dev Lead, your responsibilities will include:
– Contributing to planning new compiler and editor features
– Coordinating feature work with leads on other teams both internal and external to Visual Basic
– Managing compiler team feature work
– Mentoring your team in their careers, including dev leads reporting to your position
– Following up with customers to ensure we deliver the best Visual Basic product ever
This is a “manager of managers” position, and prior experience as a development lead is a requirement. The ideal candidate will be skilled in leadership, technology, and collaboration, and will have a history of high management review scores. Qualifications include a BS in CS/EE -or equivalent-, a minimum of 3 years as a development lead, and 7 or more years of software engineering experience overall. Shipping experience and deep knowledge of compiler, debugger, and editor technologies are a must.

Here’s a link to the job on the Microsoft career site. If you’ve got the qualifications, this is a great job with a great bunch of people. And you really can take my word for it, since it used to be my job!

44 thoughts on “Want to build a compiler?

  1. Jonathan Allen

    I actually wrote a parser for ASP in my last job. Not to compile, but to check for syntax errors before our customers found them. Unfortunately it doesn’t do everything that it needs to because I was way over my head.

    (Ok, this is your cue to jump in with recommendations on compiler books.)

    Reply
  2. Sue

    Hi. I don’t know if this is the right place for this, but I was told by MSN customer service to look at the community newsgroups for programming help. Is this the right place?

    Anyway, my question is on automatically coping folders to the D: drive. I looked on the MSDN Help and I saw how creating a FileSystemObject is used for that generally. However, while that works for my C; and A: drive, it doesn’t for my D: drive. It says’ permission denied’.

    Hel!. How do you copy things to your D: drive?

    Reply
  3. Myagi

    Hi Sue, I suspect that your CD/DVD drive is mapped up as D: and that this is why you get the "Access Denied" message. You cant write the files to a cd this way, you would have to burn them onto the cd. This is probably possible with the API s in Windows xp.

    Reply
  4. Paul

    Hi U,

    As each operating system comes with it’s C/C++ compiler why don’t you write a translator from VB to C++, is far more easy and you get only one copy of compiler to maintain.

    Sound smart but I think that it had already been implemented.

    I have done it myself years ago, concept works.

    The principle is very simple turn every Basic statements into functions and write for each function and equivalent in the target language C++ in our case.

    Collect every equivalent function in a library file wich is included with every main: basic.cpp

    Adjust the syntax some:

    crlf -> ; (end of line)

    then -> {

    else -> } else {

    end … }

    Plus some more tricks and magic powder

    The converter get app.bas -> app.cpp run the compiler

    and you got your .exe

    Enjoy

    Reply
  5. Even Steven

    Frankly, I love building compilers. However, I take exception and offense in this case:

    VB is not the coolest programming language ever. VB is a stupid, stupid language with stupid constructs and serious flaws that impact on all but the most simple of programs.

    Aha! I hear you say, but it is used by the majority of application developers, and even the lowest paper-pusher can now write programs!

    Yes, but this is NOT a good thing. Programming is a science. Like all sciences, it should be studied in depth and respected.

    There is a reason DNA sequencing has not been made available to everyone.

    VB may make it possible for everyone to write programs, but certainly not everyone should.

    Reply
  6. Raj Chaudhuri

    Even Steven

    I take exception and offense in the case of your comments.

    How is VB a "stupid, stupid language"? Could you give some examples of stupid constructs in VB? And what are these "serious flaws" that you talk about?

    The rest of you comments adequately display the "high priest" mentality. Knowledge should be avaible to only a chosen few, who will then in their infinite wisdom dole it out in small, digestable doses to the unwashed masses. Sir, this attitude went out of style in the late eighties.

    If it hadn’t, computing would still look like it had looked then. The minicomputer companies would have ruled with an iron hand. And many things that we take for granted would just not have happenned. I mean, the UNIX "Writer’s workbench" was a very respected, studied-in-depth method to create documents, right?

    Anyway, let us ignore the pedantry. Please, how is VB a "stupid language" ?

    Paul, I’m sorry to make your blog comments a battleground. But I cannot resist answering comments like Mr. "Steven"’s. If he likes, the discussion can continue at my site.

    Reply
  7. Josh Einstein

    >> How is VB a "stupid, stupid language"? Could you give some examples of stupid constructs in VB? And what are these "serious flaws" that you talk about? <<

    I’m not Steven, but I’ll add my two cents anyway.

    CType

    Byval

    The underscore

    My

    Functions which duplicate framework constructs

    Attributes which require an underscore after them

    With

    Non-short circuiting expressions

    ElseIf

    On Error Resume Next

    IIF

    (And although not an issue anymore, who can forget the "twip" )

    I could go on but I’ve gotta get back to work. I actually like VB for alot of things but there are plenty of stupid constructs in VB and as far as professional development goes, it will always pale in comparison to C# which is why it’s being largely ignored in MSDN.

    Reply
  8. Even Steven

    Josh,

    A very nice list. Thanks.

    Looking at your list, and assorted other VBisms, I’m constantly incredulous that this language was ever ‘designed’. VB is a hap-hazard collection of work-arounds and tacked-on enhancements. VB may have begun life as a supposedly well-designed language (*cough…*), but it has been constantly degenerating since.

    How can you argue that VB is well-designed, or the even-more ludicrous "coolest programming language ever"? Look at its syntax! It’s rife with inconsistencies.

    Examples:

    why have subs AND functions?? They should all be functions. A sub is just a function that doesn’t return a value.

    if … then … end if blocks are stupid. Why specify ‘then’ at all? Why use "End If" when a simple "End" should suffice.

    Wend… stupid. Laughably stupid. Replace with a simple end.

    Loop. See above.

    Dim – Why can’t I initialise a value when I declare it?

    I realised just how stupid VB is when I discovered it had no function for determining the number of dimensions of an array.

    The only way I could get the number of dimensions in an array was to pass the array to a JavaScript function and have it return the number of dimensions. This was particularly annoying, as I hate Java too.

    I can give plenty of other examples, if you need them.

    Reply
  9. Sue

    Hi Sue, I suspect that your CD/DVD drive is mapped up as D: and that this is why you get the "Access Denied" message. You cant write the files to a cd this way, you would have to burn them onto the cd. This is probably possible with the API s in Windows xp.

    Thanks Myagi for the info. Yes I know you have to burn CD’s, which I do, but I don’t want to have to manually do the first step, which is first copying and pasting to the D: drive, before you then use the ‘burning wizard’. Since it’s just copying and pasting, can’t this be done automatically somehow, with an code object?

    The reason I want to do this is I don’t want my friends to have to root around in Explorer to manually copy their data backup folder each time, and maybe copy the wrong folder- I’d prefer it to be done automatically so they can just click the wizard to finish it. There has to be a good way for this, no?

    Is there a topic in Help for this? I didn’t find it.

    Reply
  10. Andrei Alecu

    Even Steven

    You are mistaking VB with VBA/VBScript. They are not the same thing.

    1) You can use UBound in VB6 (pre .NET) to get the number of dimensions of an array.

    2) True was defined as -1 because it was stored as a 16bit signed integer with all the bits set (11111111 11111111). I believe this was changed in VB.NET and True is now 1. I believe -1 made more sense from a technical point of view.

    3) Also, many of your points are no longer valid. VB.NET is being discussed here. It’s the same as comparing C with C++. Many of your points are outdated.

    I’m currently a C# developer, haven’t touched VB in a couple of years, but I come from a heavy VB background, and believe me when I say that there were truly some brilliant minds using it hardcore, trying to work around its limitations.

    Which reminds me the only thing I always disliked about VB: how it tries to hide everything from you (the programmer) in order to make your job easier. But when you needed to go into more detail, you couldn’t do it without major workarounds involving the Win32 API, completely destroying productivity. Reminds me of the time when people figured out how to use assembler (or better said machine code) in VB6. Ah, those were the days 🙂

    Reply
  11. sp

    A compiler developer who is a "manager of manager". Sounds scary ;-). I’m a compiler geek, currently on career break. What has me sitting and considering options is wondering about individual contributor positions in such teams. I don’t know the microsoft ‘rank’ structure. Do you have individual contributors at principal engineer and director level?

    Reply
  12. Yogesh Singh Adhikari

    Better arithmethic and modification and upgradation of the lexical analyser and error detector phases would help in making the next generation compiler which would be much faster and have greater accuracy and efficiency than the present ones.

    Reply
  13. Josh Einstein

    Sue: When you copy and paste to the CD burning with Explorer, you’re not actually writing anything to the drive. Windows has a special folder where it stores these files temporarily where they wait cached to be written to the CD. The actual location of these files is typically something like:

    %UserProfile%Local SettingsApplication DataMicrosoftCD Burning

    You can get the full path to the special folder by calling SHGetSpecialFolderPath and passing the CSIDL_CDBURN_AREA (defined as 0x003b) to the nFolder parameter.

    I’m not sure if Windows will immediately "pick up" files waiting to be burned here or not.

    Reply
  14. Even Steven

    Andrei:

    I assure you, I am not confusing VB with VB Script (which is even more stupid than VB).

    Ubound does not give the number of dimensions of an array.

    Raj: Your blog bites. Most languages where boolean types are not allowed define true as 1, false as -1, and not-true-or-false as 0.

    VB/VB.NET/VBSCRIPT are all fruits of the same rotten tree.

    I have yet to meet a professional programmer / developer who develops applications in VB when given an alternative (except maybe ADA, but even then I’d have a think about it).

    And, before you get any bright ideas and put your hand up, I’ll tell you now that anyone who develops in VB by choice is most certainly not a professional programmer.

    To add credibility to my rant, I have more than 20 years of solid programming background behind me, and have written several well-known books on programming (yes, you’ve probably heard of me). And, no, I’m not going to tell you what those books are, nor my real name. It starts with L though….

    Reply
  15. paulvick

    Even:

    I’m really sorry for whatever happened to you that’s embittered you so much about Visual Basic and the world. To feel the need to respond with such vitriol to an obviously tongue-in-cheek comment (i.e. VB being the "coolest language ever") betrays what must be a very deep wound of some kind or another. I take some solace in the fact that it doesn’t appear to be VB’s exclusive fault–given the additional vitriol you direct at other languages and at innocent readers who are attempting to engage you in reasoned debate–but I do feel empathy for the world you must live in. It doesn’t sound like a lot of fun. I do wish you the best though.

    Paul

    Reply
  16. gary7

    Gee, Even;

    just can’t stand success at the lower level, huh?

    If you don’t have 20- years experience, 20 million dollars, and 200 employees, then you’re a nut case incapable of competetive development and programming?

    You wrote how many books? But can’t say what they are and what your name is?

    How pathetic for someone like you flaming a public forum — does the word "DUH" CType for you??

    Reply
  17. Anthony D. Green, MCTS

    Rather than continuing to engage in this now childish back and forth I elect now to speak fondly of those features of BASIC and VB.NET that I appreciate and why. I do not do this with the intention to put down the users of other languages nor to suggest that my opinions represent any absolute fact of quality.

    The other day I was using C++/CLI. Having read parts of the spec I was rather impressed with it over that most heinous predecessor, Managed Extentions to C++. C# is DEAD I said (chuckle). I just wanted to play around with some objects and do a little "Hello World". C++ has those little syntactic querks but that didn’t really bug me that much. It comes with the territory.

    After a while I kept getting this really strange compile error that wasn’t all that helpful. After maybe 20 minutes it occured to me! In VB when I prototype I tend to start out in my Globals module (I said it, MODULE – and I don’t feel bad about it either) and then I’ll add a class to the same code file. As it gets larger I’ll move it to its own file, but for little dinky programs that’s how I start. C++/CLI for all its performance, all it’s power and total uberness could not compile my app because the test harness methods (in the main class) occurred before the class definition lower in the same file.

    That’s right, the class was undefined at the time of first use. Rather than say that and "Move this definition up" or even better be smart enough to figure it out the C++ compiler just says that the type identifier is undefined, the variable identifier is undefined, there is a syntax error with the aforemention undefined identifier and that the -> operator was incorrectly used on the non existent variable, and my personal favorite:

    "Error 5 fatal error C1004: unexpected end-of-file found" which was due to not putting a semicolon after the end brace of my class definition; in all my years I’ve never failed to put a System.NewLine at the end of a line in VB but that’s another story.

    The point is that the compiler (and lack of Background Compilation) was pretty much no help to me. I don’t use C++/CLI at all but I imagine one day I will but still the things I like about VB (And there are things I don’t like about it) are the little things it does to make my life easier, my day more productive. In VB I can put my attention on more important things than 2 word error messages and code file topology.

    There are probably hundreds of other things I like about my VB experience but for now I’ll leave some for the rest of you.

    Reply
  18. Even Steven

    Perhaps one of you besotted clowns could point out JUST ONE benefit VB has over other languages.

    Example: C is fast, Perl is great for parsing text, PHP is good for building web appls, and functional languages are great for lexical analysis.

    What is VB good for?

    And don’t say VB is obviously good because everyone uses it. That used to be the advertising campaign for cigarettes.

    Reply
  19. DetroitJ

    VB is good for many applications; in particular rapid application development. I have used it for years in many places where it would be far too time consuming to build an app in C. Now, in the era of .NET, what difference does it really make if someone wants to use VB, C#, or anything else that will get turned into MSIL anyway. I started out with BASIC, then Object PASCAL and then moved into C & C++ both for UNIX and DOS; so I have experience with many facets of programming. To call VB stupid is just mean. A lot of small businesses can’t afford to have ‘professional developers’ work for them so there are a lot of things that they need to be able to do on thier own. VB is a nice fit. Someone with a reasonable amount of computer skill can make an app that will help one of thier business processes to be more efficient and might just help them to get big enough to one day hire a ‘professional developer’

    Reply
  20. Stephen K. Gartrell

    Fascinating, how quickly some folks jump on VB.

    Programming languages are like weapons…its not the weapon, its the idiot behind them that makes them dangerous.

    I’ve been in the technology game since the mid ’70s, and if I had my druthers everybody would write in assembly and there would be no code bloat…

    Well, not really.

    VB’s greatest fault was that it was EXTREMELY successful as a rapid application development language.

    You could develop side by side with another project development team using another development language and be out the door with a functional system while the other team was still creating (if not still arguing over the specs for) the user interface.

    The people that argue for other languages (ANY language, as long as its not VB) remind me of the people that used to live behind the glass walls of the mainframe shop…if its not complex, its not good…if anybody without my inflexible skill set can do it, its not good…the same people that would have nuked the desktop PC given half the chance.

    lollll…when I saw how .NET was being used to obfuscate VB instead of enhance it, I had no doubt it was the dark hand of such as "Even Steven" at work…

    Seems that Microsoft is straightening that back out, though.

    But I can’t hold anybody whose been university educated responsible for those attitudes. As I was getting one of my degrees, I found that the "anti-VB" attitude is often deeply engrained into the academic establishment.

    Typically, it comes from the same sort of professor who insists that invoking a "return" in the middle of a function call is a no-no…

    Reply
  21. Stephen K. Gartrell

    lolll..yah, there are those who would rather see

    lnodepool_t *lnode_pool_create(listcount_t n)

    {

    lnodepool_t *pool;

    lnode_t *nodes;

    assert (n != 0);

    pool = malloc(sizeof *pool);

    if (pool) {

    nodes = malloc(n * sizeof *nodes);

    if (nodes)

    lnode_pool_init(pool, nodes, n);

    else {

    free(pool);

    pool = NULL;

    }

    }

    return pool;

    }

    instead of seeing:

    lnodepool_t *lnode_pool_create(listcount_t n)

    {

    lnodepool_t *pool;

    lnode_t *nodes;

    assert (n != 0);

    pool = malloc(sizeof *pool);

    if (!pool)

    return NULL;

    nodes = malloc(n * sizeof *nodes);

    if (!nodes) {

    free(pool);

    return NULL;

    }

    lnode_pool_init(pool, nodes, n);

    return pool;

    }

    But "to me" the second example is explicit about points of failure at first glance…completely without comments.

    Guess I either assembled (or disassembled) too much.

    Since the compiler was probably going to output ASM that jumped to a label where the flags, registers, and stack were restored on processing my "premature" return anyway, I never felt the need to construct code that truly exercised "pretty print".

    Reply
  22. Sue

    As a decidedly non-profesional programmer, I have to say I love VB and can understand why everyone programs in it. I took a little C and C++ in college as well, and have to say VB is more intuitive, easy to use. Never tried ‘Visua’l C++, but I doubt it can be as easy to use as Visual Basic.

    What many of you real programmers are forgetting is that most programming is not for NASA space shuttle landings, it to move around a few customer names and phone numbers in the business world. It’s pretty much all routine. Why make it more complicatated than it needs to be just to get some obscure functionality that you’ll probably never need anyway?

    VB forever, people!

    Reply
  23. skullring

    Even Steven:

    VBScript is even more stupid than VB, it is where the "love bug" virus was made.

    I want to see all those books you’ve written, I want to see how you say VB as "STUPID" written there line after line.

    Your programming language teaches you how to hate other language. Pity you will not go anywhere with your silly attitude.

    Reply
  24. Even Steven

    I disagree, I find the first example clearer (although with no indenting, they’re both nearly unreadable).

    More than one return in a function makes for difficult reading because each return interrupts the flow of the program, effectively acting like the very-outdated goto statements.

    Consider the case of a series of returns nested within a series of nested ‘if’ statements. It quickly becomes difficult to read.

    Even worse, consider multiple return statements within recursive functions. Not nice.

    With just one return in a function, program flow is easier to see. Everything is in its right place. (thanks radiohead)

    And Sue, thanks for your thoughts, but it is worth mentioning that I spend most of my time these days getting paid extortionate amounts of money to fix / rewrite poorly designed, badly written code, particularly code written in VB by novice programmers. For all but the most simple of programs, software design methodologies should be used. That way the software is already designed to allow for improvements.

    The software lifecycle for newbie programmers is typically:

    write the code.

    test the code.

    start a new project.

    add more functionality to the first project.

    fix everything that breaks.

    add work-arounds

    iterate as required

    call in professional developer to re-write the whole thing. (moi)

    Reply
  25. Anthony D. Green, MCTS

    You’re right. Newbs screw up. That’s why they’re newbs. And nothing is going to change that save experience and training.

    Using an uber difficult language only means it will take you longer to screw up. However, they do prototype the potential real business value of a software solution to businesses who are ignorant or intimidated by acronyms like ASP.NET ISV .NET 2.0 MCTS. More over if you think a one size fits all approach to software development work sthen you aren’t really thinking about the ROI. "Design into the ground" is good for a multimillion dollar enterprise level distributed app, but it’s kinda hard to sell a grocery store owner who is afraid to be in the same room with a computer on "Give me 6 months to flesh this functional spec out so that in the event you should become K-Mart everything will be in place for that. Model-View-Controller and 17 levels of indirection "abtraction" and a 15ms per call increase in performance can be almost sexual for a passionate developer but Ma and Pa kettle might a little less reluctant to pay for it when plain ol’ WinForms designer Sub OnClick… Me.Close() and a 1.015 second delay would have had the same end result an hour (and $120) earlier.

    Stupid code is a context-bound thing. The nature of your code has to be consider against the developer tools you use and how they work. Not all langauges and platforms and IDEs work the same and the code probably reflects the limitations and abilities of the tools. Case-sensitivity isn’t some brilliant thing that was put in the language to demonstrate how smart you are because you can distinguish two variables by case – it’s just faster to parse using ordinals rather than culture-aware case-insensitives. Hungarian notation and short names. Manual method inlining or caching versus "The JIT will do it". At least in VB you can say the GC will get it (hopefully). Ever see a script-kiddie with an itchy malloc-finger?

    As for multiple returns it depends on where and how they are. Even Steven, in you example of like 5 levels deep nesting it would be bothersome. In all honesty I don’t like 5 levels deep nesting of anything (cept maybe function calls). Early validation returns in the preamble of the real method work I don’t mind. Setting a "result" variable 9 different places isn’t any more attractive or understandable to me than the oh so intuitive RETURN keyword. But beind a .NET programmer I believe in small methods – better JITing.

    The point is that saying "Newbs shouldn’t be allowed to exist" is cutting your nose to spite your face and a newb is no more likely to trip into a hole and become Rocky Lhotka one day in VB or C++ or any other language. It’s just a matter of having the passion/desire, the need, and the resources all available at the right time to refine yourself – and until people do at least you get payed your extortionate amount of money, right?

    Reply
  26. Pingback: Panopticon Central

  27. Brackett

    Sorry but VB is the best language ever. There is no simpler way to layout controls in your windows and put in basic interface logic. If you want to add functions that do complex things you want to make a DLL in c and its a line of code to get the DLL functions into your VB app.

    Reply
  28. Brackett

    Also VB is great for databases. If you’re making an executable program there are very few reasons to use anything but VB6/C. Interacting with controls is perfect. It is crazy to use MFC because it is silly.

    I know this is pretty lame but Stephen K. Gartrell, your post starting ‘lolll..yah, there are those who would rather see’,

    above, is madness. I hope you never use that code because it’s clearly not getting you anywhere fast. I know, all this is all off topic so I’ll say something on topic now:

    I don’t want to make a compiler. Why would i do this? Microsoft, stop making new languages. You aren’t improving things. If you want to do something useful, give me some more controls to use in VB6.

    Reply
  29. Hong En

    VB is good, I started out my "Facinating Programming Adventures" from vb and advanced to stricter programming syntax languages like C++, C# and other scripting language.

    One thing I like about vb is that it allows newbie a good motivation in the programming world.

    Anyway, arguing about programming language is usually very objective and well pointless. I mean, you just use a language you like and develop applications, good applications.

    That’s the point of programming!

    Reply

Leave a Reply