New OOTS products from CafePress
New OOTS t-shirts, ornaments, mugs, bags, and more
Page 1 of 3 123 LastLast
Results 1 to 30 of 61
  1. - Top - End - #1
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Job hunting and programming tests

    So a colleague was interviewing at a software company , and they dropped this on him.

    Huffington Post says this is becoming pretty common.

    HackerRank’s community of developers has grown to over 1 million users coming from 300 different countries. Companies on HackerRank’s platform include Twitter, Amazon, BNY Mellon, VMware, Booking.com and over 1000+ other businesses.
    Some of those challenges are very easy, while some I'm not sure I could do; I haven't had to do serious dynamic programming since algorithms class.

    Happily, they do have practice tests and a discussion board where they talk about those solutions to those problems.

    I guess my point is: From my chair as a senior software engineer, this and similar platforms look like the way really big companies will go for their hiring in the future, using this as a pre-screen so they don't interview people who can't code. That doesn't make me especially happy, since some of these tests would fail me and do not do full justice to my own abilities.

    This guy has a great takedown of the site.

    Still .. if that's the way hiring's going to be done, it probably behooves me to start brushing up on these tests in case I ever do need to go out there and job-hunt.


    Respectfully,

    Brian P.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  2. - Top - End - #2
    Surgebinder in the Playground Moderator
     
    Douglas's Avatar

    Join Date
    Aug 2005
    Location
    Mountain View, CA
    Gender
    Male

    Default Re: Job hunting and programming tests

    When interviewing for my current job, I had to do an exercise on HackerRank after the initial talk with a recruiter and before the first interview with a developer. The company has their own private test they had to specifically give me access to, and I think it worked well.

    Since then, I've become one of the graders for that test, and I've seen a rather extreme range of quality in the submitted solutions. Some of them were quite astonishingly bad.

    And then there was the guy who didn't finish in time, deleted all his work, and then claimed he'd seen it before somewhere and therefore skipped doing it because it wouldn't be a fair test.
    Last edited by Douglas; 2017-07-24 at 08:09 PM.
    Like 4X (aka Civilization-like) gaming? Know programming? Interested in game development? Take a look.

    Avatar by Ceika.

    Archives:
    Spoiler
    Show
    Saberhagen's Twelve Swords, some homebrew artifacts for 3.5 (please comment)
    Isstinen Tonche for ECL 74 playtesting.
    Team Solars: Powergaming beyond your wildest imagining, without infinite loops or epic. Yes, the DM asked for it.
    Arcane Swordsage: Making it actually work (homebrew)

  3. - Top - End - #3
    Titan in the Playground
    Join Date
    Oct 2010
    Location
    Dallas, TX
    Gender
    Male

    Default Re: Job hunting and programming tests

    A tool for hiring doesn't have to be perfect to be useful.

    Often, companies have a thousand resumes, with maybe two dozen that would be great employees. A tool to reduce those thousand resumes to three people to interview, one or two of whom will be a great employee, is a very useful tool, even though it filtered out 23 great candidates, and didn't filter out all the inferior ones.

  4. - Top - End - #4
    Colossus in the Playground
     
    BlackDragon

    Join Date
    Feb 2007
    Location
    Manchester, UK
    Gender
    Male

    Default Re: Job hunting and programming tests

    I don't think this is anything new. When I was being interviewed for my first programming job 25 years ago one of the things they did was show me a piece of Unix shell script and ask me what it did. I had no knowledge of Unix or of shell script programming, but they were impressed that I actually tried to figure it out anyway, even though I utterly failed to do so.

  5. - Top - End - #5
    Troll in the Playground
     
    PaladinGuy

    Join Date
    Mar 2012
    Location
    UK
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by factotum View Post
    I had no knowledge of Unix or of shell script programming, but they were impressed that I actually tried to figure it out anyway, even though I utterly failed to do so.
    Given how easy it is to look up how to do things on the internet these days (OK, then not so much, but it was still possible) I strongly suspect that how you reacted without the knowledge was far more useful to their evaluation of you that you actually knowing what the code did would have been.

    Quote Originally Posted by Douglas
    Since then, I've become one of the graders for that test, and I've seen a rather extreme range of quality in the submitted solutions. Some of them were quite astonishingly bad.
    This I can believe.
    Now, let me guess, if someone makes a reasonable failed attempt but lays their code out clearly and with comments, they are preferred as a candidate to the person who writes code that will work but does not comment it or lay it out neatly?

  6. - Top - End - #6
    Titan in the Playground
     
    J-H's Avatar

    Join Date
    Feb 2008
    Location
    Texas
    Gender
    Male

    Default Re: Job hunting and programming tests

    It may be different in the programming world, but in my world (transportation/logistics) jobs are only posted and resumes taken if nobody knows anyone who can refer someone in. Most of the people in the office (20-30) were hired because they had worked with someone somewhere else, or knew someone who trusted them enough to say "This person will probably be good at X."

    Networking is huge when finding a job, because it lets you skip to the top of the pile - except, perhaps, at HR-straitjacketed corporate behemoths.
    Things published on DM's Guild
    Campaign Logs:
    Baldur's Gate 2 (ongoing)
    Castle Dracula (Castlevania)
    Against the Idol of the Sun (high level hexcrawl)

  7. - Top - End - #7
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by J-H View Post
    It may be different in the programming world, but in my world (transportation/logistics) jobs are only posted and resumes taken if nobody knows anyone who can refer someone in. Most of the people in the office (20-30) were hired because they had worked with someone somewhere else, or knew someone who trusted them enough to say "This person will probably be good at X."

    Networking is huge when finding a job, because it lets you skip to the top of the pile - except, perhaps, at HR-straitjacketed corporate behemoths.
    That's just it. If you're working for a large corp or even a mid-size one you still have to go through the HR process even if you've been referred internally. Your hiring manager can speed the process along but ze may not have the option to bypass all the loops and hoops. I know one person: To get hired at this one company you have to pass an in-person interview AND a code interview AND a third interview where they try to determine whether you're the kind of employee they want, long term.

    Sort of like this , but I don't recommend trying to fill job slots by, erm, opening vacancies. That sort of thing gets you thrown in prison in real life.


    Respectfully,

    Brian P.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  8. - Top - End - #8
    Firbolg in the Playground
    Join Date
    Apr 2005
    Gender
    Male

    Default Re: Job hunting and programming tests

    When I was on the job hunt, I ran into several places that asked me to do HackerRank challenges. The one that annoyed me most was one that gave 3 different problems and a total of 30 minutes to work on them. I get that it's a test for how you behave under pressure and what you prioritize... but it struck me as particularly unfair having problems you're not expected to be able to finish and no idea what the grading rubric is. Do they prefer you finish one fully, or get pseudocode up describing the process for solving all 3? Better guess right!


    But seriously I wound up just giving up on finding a coding job despite it being what I went to school for. After the first year of hunting I was desperate enough to take any job, and as soon as you're not on the hunt and in a full time job it never feels like there's enough time to practice coding to keep up enough to finish anything but the simplest programming tests.
    If my text is blue, I'm being sarcastic.But you already knew that, right?


  9. - Top - End - #9
    Surgebinder in the Playground Moderator
     
    Douglas's Avatar

    Join Date
    Aug 2005
    Location
    Mountain View, CA
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by Khedrac View Post
    Now, let me guess, if someone makes a reasonable failed attempt but lays their code out clearly and with comments, they are preferred as a candidate to the person who writes code that will work but does not comment it or lay it out neatly?
    I remember giving a failing grade to someone whose code worked perfectly because it was a difficult to read mess. Conversely, one or two minor bugs can still be a borderline pass if it's well organized and easy to read.

    Quote Originally Posted by Seerow View Post
    When I was on the job hunt, I ran into several places that asked me to do HackerRank challenges. The one that annoyed me most was one that gave 3 different problems and a total of 30 minutes to work on them. I get that it's a test for how you behave under pressure and what you prioritize... but it struck me as particularly unfair having problems you're not expected to be able to finish and no idea what the grading rubric is. Do they prefer you finish one fully, or get pseudocode up describing the process for solving all 3? Better guess right!
    30 minutes total for all 3 together, not 30 minutes each? Unless the problems are downright trivial, that's ridiculous.

    My company's test is only one problem and allows 2 hours, and a lot of people take the entire 2 hours.
    Like 4X (aka Civilization-like) gaming? Know programming? Interested in game development? Take a look.

    Avatar by Ceika.

    Archives:
    Spoiler
    Show
    Saberhagen's Twelve Swords, some homebrew artifacts for 3.5 (please comment)
    Isstinen Tonche for ECL 74 playtesting.
    Team Solars: Powergaming beyond your wildest imagining, without infinite loops or epic. Yes, the DM asked for it.
    Arcane Swordsage: Making it actually work (homebrew)

  10. - Top - End - #10
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by Douglas View Post
    I remember giving a failing grade to someone whose code worked perfectly because it was a difficult to read mess. Conversely, one or two minor bugs can still be a borderline pass if it's well organized and easy to read.


    30 minutes total for all 3 together, not 30 minutes each? Unless the problems are downright trivial, that's ridiculous.

    My company's test is only one problem and allows 2 hours, and a lot of people take the entire 2 hours.
    ... I would be interested in taking this test, if I can make the time. Not your company's actual test, mind you, because that needs to be closely guarded. But something like it.

    ...

    Actually, that gives an idea. Would it be possible to have a GITP coding challenge on hackerrank? With judges and submissions and everything?

    Respectfully,

    Brian P.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  11. - Top - End - #11
    Firbolg in the Playground
    Join Date
    Apr 2005
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by Douglas View Post
    I remember giving a failing grade to someone whose code worked perfectly because it was a difficult to read mess. Conversely, one or two minor bugs can still be a borderline pass if it's well organized and easy to read.


    30 minutes total for all 3 together, not 30 minutes each? Unless the problems are downright trivial, that's ridiculous.

    My company's test is only one problem and allows 2 hours, and a lot of people take the entire 2 hours.
    It was 30 minutes for all 3. And none of the problems was super difficulty, but none was completely trivial either. I could have easily spent 30-60 minutes on each. I wish I could remember more details but this was like 2-3 years ago.
    If my text is blue, I'm being sarcastic.But you already knew that, right?


  12. - Top - End - #12
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Well, I just got a job offer, and one of the companies did indeed ask for a test. In fact, four had a whiteboard exercise and the fifth had a hackerranked challenge. I didn't have any real problems with any of them. Hackerranked scored my solution as 'average', because I was not then familiar with the system and some of the test cases did not pass. Regardless, it got me through to the phone interview, which is as much as you can expect from the code screen.

    I landed three job offers with three different software companies so if anyone has any questions about the process of landing a job, I may have some answers.

    Anyway, this is Not the test I worked on, but a random hackerranked challenge, which I took. It's a Graph theory problem.

    And here is the solution which eventually passed all test cases -- written in C#

    Spoiler
    Show

    Code:
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    class Solution {
    
        static bool[] myVisitedCities;
        
        // populate a dictionary such that the key is every city , regardless of whether it is connected or not, 
        // and an array list which contains the number of cities reachable from the key. 
        static Dictionary<int, int[]> ReadConnectionsBetweenCitiesFromStdIn(int pNumberOfCities, int pNumberOfRoads) {
    
                Dictionary <int, List<int>> collectionOfRoads = new Dictionary<int, List<int>>(); // the key is the vertex, 
                // while the value is a list of all the vertices reachable from the key. 
    
                for(int a1 = 0; a1 < pNumberOfRoads; a1++){
                    string[] tokens_city_1 = Console.ReadLine().Split(' ');
                    int city1 = Convert.ToInt32(tokens_city_1[0]);
                    int city2 = Convert.ToInt32(tokens_city_1[1]);
                    if (!collectionOfRoads.ContainsKey(city1)) {
                        collectionOfRoads.Add(city1, new List<int>());
                    }
                    collectionOfRoads[city1].Add(city2);
                    if (!collectionOfRoads.ContainsKey(city2)) {
                        collectionOfRoads.Add(city2, new List<int>());
                    }
                    collectionOfRoads[city2].Add(city1);
                }
            
                for (int a2 = 1; a2 <= pNumberOfCities; a2++) {
                        if (!collectionOfRoads.ContainsKey(a2)) {
                            collectionOfRoads.Add(a2, new List<int>());
                        }
                }
            
                Dictionary<int, int[]> finalCollection = new Dictionary<int, int[]>();
                foreach (int city in collectionOfRoads.Keys) {
                    finalCollection.Add(city, collectionOfRoads[city].ToArray());
                    
                }
                return finalCollection; 
        }
        
        // Return a component such as all cities that are reachable from cityToVisit.  pVisitedCities contains the list of visited cities
        // so far ( so we don't visit the same city twice), pRoadCollection is a dictionary as described in    
        // ReadConnectionsBetweenCitiesFromStdIn. 
        static HashSet<int> getComponent(HashSet<int> pVisitedCities, Dictionary<int, int[]> pRoadCollection, int cityToVisit) {
            pVisitedCities.Add(cityToVisit);
            myVisitedCities[cityToVisit] = true; 
            int[] connectedCities = pRoadCollection[cityToVisit];
            for (int i = 0; i < connectedCities.Length;i++) {
                int connectedCity = connectedCities[i];            
                if ((!pVisitedCities.Contains(connectedCity)) && (pRoadCollection.Keys.Contains(connectedCity))) {
                    pVisitedCities = getComponent(pVisitedCities, pRoadCollection, connectedCity);
                }            
            }
            return pVisitedCities; 
        }
        
        // initiate the get component logic with the given city and an empty component. 
        static HashSet<int> initiateComponentSearch (Dictionary<int, int[]> pRoadCollection, int pCity) {
            HashSet<int> visitedCities = new HashSet<int>(); 
            return  getComponent(visitedCities, pRoadCollection, pCity);
        }
        
        // if cost of library < cost of road, just build a library in every city. 
        // otherwise perform DFS to find all components, where a component is a set of connected cities. The cost for 
        // each component is then ((component size - 1) * cost of road) + cost of 1 library.     
        static long CalculateMinimumCost (int pNumCities, int pNumRoads, long pCostOfLibrary, long pCostOfRoad, Dictionary<int, int[]> pRoadCollection ) {
                if (pCostOfLibrary < pCostOfRoad) {
                    return (long) (pCostOfLibrary * pNumCities);
                } else {
                    long result = 0;
                    myVisitedCities = new bool[pRoadCollection.Count+1];
                    for (int i = 1; i < myVisitedCities.Length;i++) {
                        myVisitedCities[i] = false; 
                    }
                    for (int j = 1; j< myVisitedCities.Length;j++) {
                        if (!myVisitedCities[j]) {
                            HashSet<int> aComponent = initiateComponentSearch(pRoadCollection, j);                        
                            long componentCost = ((aComponent.Count -1) * pCostOfRoad) + pCostOfLibrary; 
                            result += componentCost;                         
                        }
                    }
                    
                    return result; 
                }
            
        }
        static void Main(String[] args) {
            int numberOfQueries = Convert.ToInt32(Console.ReadLine());
            for(int a0 = 0; a0 < numberOfQueries; a0++){
                string[] tokens_n = Console.ReadLine().Split(' ');
                int numberOfCities = Convert.ToInt32(tokens_n[0]);
                int numberOfRoads = Convert.ToInt32(tokens_n[1]);
                long costOfLibrary = Convert.ToInt64(tokens_n[2]);
                long costOfRoad = Convert.ToInt64(tokens_n[3]);
                Dictionary <int, int[]> collectionOfRoads = ReadConnectionsBetweenCitiesFromStdIn(numberOfCities, numberOfRoads); // the key is the vertex, 
                // while the value is a list of all the vertices reachable from the key. 
                long minimumCost = CalculateMinimumCost(numberOfCities, numberOfRoads, costOfLibrary, costOfRoad, collectionOfRoads);
                Console.WriteLine(minimumCost); 
            }
        }
    }


    I'd welcome constructive critique.

    Respectfully,

    Brian P.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  13. - Top - End - #13
    Barbarian in the Playground
     
    aspi's Avatar

    Join Date
    Aug 2013

    Default Re: Job hunting and programming tests

    Quote Originally Posted by pendell View Post
    I'd welcome constructive critique.
    The following is more of a meta-level comment.

    You're essentially asking for feedback on two things: your approach to the solution of the problem (i.e., an algorithm description) and your implementation of the former. As basis for the discussion you only provide the code of your implementation. That makes it much more difficult to discuss the concept of the algorithm. In practice, the conceptual approach is more likely to influence the correctness and efficiency of your program than the implementation. For example, you could have used a brute force solution to the given problem, which could have been entirely correct but horribly inefficient to the point where it wouldn't even run on city networks of size > 50.

    By not discussing the approach and the implementation separately, you are focusing the discussion on one part of your solution (and excluding anyone who does not know C# well enough to reconstruct the approach from your code.

    If I were your employer, I'd ask for both...
    Inuit avatar with cherry banana on top by Yanisa

  14. - Top - End - #14
    Colossus in the Playground
     
    BlackDragon

    Join Date
    Feb 2007
    Location
    Manchester, UK
    Gender
    Male

    Default Re: Job hunting and programming tests

    Not a critique, just an observation: you're the only person I've ever seen who uses a0, a1 etc for loop counter variables. Where did you pick up that habit?

    (For reference: most people seem to use i, j, k for loops, while I always tended to use "loop" and, if required, "innerloop"...).

  15. - Top - End - #15
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by factotum View Post
    Not a critique, just an observation: you're the only person I've ever seen who uses a0, a1 etc for loop counter variables. Where did you pick up that habit?

    (For reference: most people seem to use i, j, k for loops, while I always tended to use "loop" and, if required, "innerloop"...).
    Well, if you look at the original problem, they have a certain amount of boilerplate code to get you started. That's where a1, a2 come from -- that's boilerplate from hackerrank's original problem. If you look around, you'll see I typically use i, j, k for indexes as well.

    Quote Originally Posted by aspi
    By not discussing the approach and the implementation separately, you are focusing the discussion on one part of your solution (and excluding anyone who does not know C# well enough to reconstruct the approach from your code.
    Some good points. I will respond as follows:

    1) In every code interview I have had, and in every job I have had -- some at very large companies -- I've never been asked to deliver a discussion of the algorithm separate from the code itself. This is because in many companies you flat don't have the luxury of meaningful comments in them, so the focus is on writing the code as cleanly and reliably as possible, even at the cost of some efficiency. Also, comments have a tendency to become out of date far more quickly than the code they describe. Of all the in-line documentation I've read, 80-90% of it was boilerplate to satisfy the shop's coding standards which didn't actually tell you anything useful, and a very amount of the rest was actively harmful because it was out of date.

    Nonetheless, I did point some comments at the top of each method, in the hopes of making the solution more clear. Were they not clear?

    Even so, I doubt the hackerrank graders will ask for the discussion as you describe. I know very well my interviewers don't -- but then, they usually want me to defend it face-to-face.

    2) Quick cook's tour algorithm description:
    Spoiler
    Show

    1) Suck the input (described in the problem) into a dictionary whose key is a city in the problem, and whose value is a List<int> giving us the cities we can reach from the key. Some of this information is only implicit in the input, so I had to derive some of it -- that's part of the reason I separated the "populate the data structure from the input" algorithm into it's own separate method.

    2) If the cost of a library is < the cost of a road, it's cheaper to simply build a library in every town than repair a road [minor digression on this in a minute]. So the cost is simply (#of cities) * (cost of library).

    3) If it's cheaper to build a road than a library, iterate over all the cities in our data structure thus:
    3A) If we've already visited this place, skip.
    3B) For the current city, execute a recursive depth-first-search to find all cities we can reach from it. I call this a "component", since not all cities are reachable from other cities and, indeed, some aren't reachable at all; they are effectively islands.
    Mark all cities touched here as 'visited' so that we don't duplicate our effort in 3A above.
    3C) The cost of the component is ((# reachable cities - 1) * (cost to repair road)) + cost of 1 library.
    3D) Add the cost in 3C to the total cost, which is the eventual final output of the algorithm.


    I hope that helps.

    Aside on point #2 in the tour:

    Spoiler
    Show

    I know it's a made-up problem, but to my mind the answer as given is absurd. If this were real, "not repairing roads" is not an option. Because more things than books travel on roads. Trucks deliver freight. People travel to work. Mail delivers paychecks and bills and junk mails.

    In other words, it makes no sense to ever not repair a road, because solving that problem figures into a lot of other problems outside problem scope. The 'minimum cost', then, should solely focus on building the minimum number of libraries even if its' technically cheaper to build a library rather than repairing a road. The road repair is a 'sunk cost', you have to do it anyway. Since you have to do it anyway, why build a superfluous library as well?

    This is a pet peeve of mine as a developer -- a large source of bugs we have is that developers don't understand the business logic, with the result that the resulting algorithm is clean, efficient, and useless for practical purposes.


    3) WRT C# -- well, as a developer myself I don't think there's anything in this particular algorithm which is so obtuse that a developer familiar with another OO language couldn't make heads or tails of it. I'm from a Java background myself, deliberately writing in a different language to hone my skills in the language. Everything I've used -- arraylists, lists, HashSet, dictionaries -- has a correspondence in Java (ArrayList, List, HashSet, HashMap). While I haven't tried Ruby or Python yet I'd be shocked if similar analogs did not also exist there.

    Not to mention -- if I'm writing this in C# it's because I'm going to show it to a C# interviewer, so the concern that it might be unintelligible to someone unfamiliar with the language is minimal.

    Respectfully,

    Brian P.
    Last edited by pendell; 2017-08-04 at 08:07 AM.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  16. - Top - End - #16
    Ettin in the Playground
     
    Griffon

    Join Date
    Jun 2013
    Location
    Bristol, UK

    Default Re: Job hunting and programming tests

    Quote Originally Posted by pendell View Post
    Well, if you look at the original problem,
    For me, it's a blank page.
    The end of what Son? The story? There is no end. There's just the point where the storytellers stop talking.

  17. - Top - End - #17
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by halfeye View Post
    For me, it's a blank page.
    Odd. Maybe you need to be registered to see the problem?

    https://www.hackerrank.com/challenge...opment/problem

    I'll write out the text in spoilers without all the neat illustration that comes with it:

    Spoiler
    Show


    The Ruler of HackerLand believes that every citizen of the country should have access to a library. Unfortunately, HackerLand was hit by a tornado that destroyed all of its libraries and obstructed its roads! As you are the greatest programmer of HackerLand, the ruler wants your help to repair the roads and build some new libraries efficiently.

    HackerLand has cities numbered from 1 to n. The cities are connected by bidirectional roads. A citizen has access to a library if:

    Their city contains a library.
    They can travel by road from their city to a city containing a library.
    The following figure is a sample map of HackerLand where the dotted lines denote obstructed roads:

    The cost of repairing any road is CROAD dollars, and the cost to build a library in any city is CLIB dollars.

    You are given q queries, where each query consists of a map of HackerLand and value of CROAD and CLIB.

    For each query, find the minimum cost of making libraries accessible to all the citizens and print it on a new line.

    Input Format

    The first line contains a single integer, q , denoting the number of queries. The subsequent lines describe each query in the following format:


    The first line contains four space-separated integers describing the respective values of n (the number of cities), m (the number of roads), CLIB (the cost to build a library), and CROAD (the cost to repair a road).

    Each line i of the m subsequent lines contains two space-separated integers, Ui and Vi, describing a bidirectional road connecting cities Ui and Vi .

    Constraints
    1<=q<=10
    1<=n<=10^5
    0<=m<= min(10^5, (n*(n-1)/2))
    1 <= CROAD, CLIB <= 10^5.
    Each road connects two distinct cities.

    Output Format

    For each query, print an integer denoting the minimum cost of making libraries accessible to all the citizens on a new line.

    Sample Input

    2
    3 3 2 1
    1 2
    3 1
    2 3
    6 6 2 5
    1 3
    3 4
    2 4
    1 2
    2 3
    5 6
    Sample Output

    4
    12

    Explanation
    We perform the following 2 queries:

    query 1:

    HackerLand contains 3 cities connected by 3 bidirectional roads. The price of building a library is 2 and the price for repairing a road is 1.

    The cheapest way to make libraries accessible to all is to:

    Build a library in city 1 at a cost of 2 .
    Repair the road between cities 1 and 2 at a cost of 1.
    Repair the road between cities 2 and 3 at a cost of 1.
    This gives us a total cost of 4. Note that we don't need to repair the road between cities 3 and 1 because we repaired the roads connecting them to city 2!

    query 2:
    In this scenario it's optimal to build a library in each city because the cost of building a library 2 is less than the cost of repairing a road 5.

    There are 6 cities, so the total cost is 6 *2 = 12.


    And here's the boilerplate code to start us off:

    Spoiler
    Show

    Code:
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    class Solution {
    
        static void Main(String[] args) {
            int q = Convert.ToInt32(Console.ReadLine());
            for(int a0 = 0; a0 < q; a0++){
                string[] tokens_n = Console.ReadLine().Split(' ');
                int n = Convert.ToInt32(tokens_n[0]);
                int m = Convert.ToInt32(tokens_n[1]);
                long x = Convert.ToInt64(tokens_n[2]);
                long y = Convert.ToInt64(tokens_n[3]);
                for(int a1 = 0; a1 < m; a1++){
                    string[] tokens_city_1 = Console.ReadLine().Split(' ');
                    int city_1 = Convert.ToInt32(tokens_city_1[0]);
                    int city_2 = Convert.ToInt32(tokens_city_1[1]);
                }
            }
        }
    }


    ETA: Hackerrank enforces memory and time constraints, and my first implementation timed out on some of the larger ones. This is because I was actually consuming the map as I traversed it to keep track of which cities I'd already visited, and remove() is apparently expensive. So I replaced that logic with a simple boolean array to keep track of which cities I had visited for the larger query, and that brought my performance time down below the parameters hackerrank would accept.

    Respectfully,

    Brian P.
    Last edited by pendell; 2017-08-04 at 09:56 AM.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  18. - Top - End - #18
    Surgebinder in the Playground Moderator
     
    Douglas's Avatar

    Join Date
    Aug 2005
    Location
    Mountain View, CA
    Gender
    Male

    Default Re: Job hunting and programming tests

    Looking at that code, the first thing that comes to mind is that you've fallen into what I view as a common "trap" of overuse of generic already-defined data structures and an aversion to defining your own.

    To start with, your input is given as a bunch of integers, so you're keeping it as a bunch of integers by default - and you're storing any relationships between them as technically independent data structures that you have to make sure you keep in sync. A particularly common form of this is having two attributes of something and storing them in two arrays or lists, depending on them having the same order and indexes - and if you ever forget to modify both of them rather than just one, program logic promptly breaks down.

    In large part because of this, your code for reading the road connections and storing them in your data structures is rather awkward.

    The approach I would use instead is to define a City class, containing fields for whether it's been visited and which other City instances it is connected to, create an array of them to map from the input integers to the objects you'll actually do the analysis with, maybe add a method for visiting a City's connected component, and build an object graph with that.

    Next, on your calculation code: It is not necessary to actually get the list of cities in each component in order to answer the problem. All you really need to know is how many components there are, and to calculate that all you need is whether a city is in any component that you've already counted. This can be used to significantly simplify your algorithm.

    Ah, what the hell. Here's my solution:
    Code:
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    class Solution {
    
        static void Main(String[] args) {
            int numProblems = Convert.ToInt32(Console.ReadLine());
            for(int i = 0; i < numProblems; i++){
                string[] tokens_n = Console.ReadLine().Split(' ');
                int numCities = Convert.ToInt32(tokens_n[0]);
                int numRoads = Convert.ToInt32(tokens_n[1]);
                long libraryCost = Convert.ToInt64(tokens_n[2]);
                long roadCost = Convert.ToInt64(tokens_n[3]);
                
                Hackerland land = new Hackerland(numCities, libraryCost, roadCost);
                
                for(int j = 0; j < numRoads; j++){
                    string[] tokens_city_1 = Console.ReadLine().Split(' ');
                    // The problem input uses 1-based indexing. Savages.
                    land.AddRoad(Convert.ToInt32(tokens_city_1[0]) - 1, Convert.ToInt32(tokens_city_1[1]) - 1);
                }
                
                Console.WriteLine(land.CalculateMinimumCost());
            }
        }
    }
    
    class Hackerland {
        private City[] Cities;
        private long LibraryCost;
        private long RoadCost;
        
        public Hackerland(int numCities, long libraryCost, long roadCost) {
            Cities = new City[numCities];
            for(int i = 0; i < numCities; i++) Cities[i] = new City();
            LibraryCost = libraryCost;
            RoadCost = roadCost;
        }
        
        public void AddRoad(int city_1, int city_2) {
            Cities[city_1].AddConnection(Cities[city_2]);
            Cities[city_2].AddConnection(Cities[city_1]);
        }
        
        public long CalculateMinimumCost() {
            if (RoadCost >= LibraryCost) {
                return Cities.Length * LibraryCost;
            }
            
            int numComponents = 0;
            foreach(City city in Cities) {
                if (!city.Visited) {
                    numComponents++;
                    city.VisitAllConnected();
                }
            }
            
            return numComponents * LibraryCost + (Cities.Length - numComponents) * RoadCost;
        }
    }
    
    class City {
        public bool Visited { get; private set; }
        private HashSet<City> ConnectedTo = new HashSet<City>();
        
        public void VisitAllConnected() {
            Visited = true;
            foreach (City connected in ConnectedTo) {
                if (!connected.Visited) {
                    connected.VisitAllConnected();
                }
            }
        }
        
        public void AddConnection(City connected) {
            ConnectedTo.Add(connected);
        }
    }
    Quote Originally Posted by pendell View Post
    ETA: Hackerrank enforces memory and time constraints, and my first implementation timed out on some of the larger ones. This is because I was actually consuming the map as I traversed it to keep track of which cities I'd already visited, and remove() is apparently expensive. So I replaced that logic with a simple boolean array to keep track of which cities I had visited for the larger query, and that brought my performance time down below the parameters hackerrank would accept.
    I would not be very surprised if your initial attempt had a subtle bug in your relatively complex logic that sent it into an infinite loop or other bad behavior but only showed up on larger input sets. Then again, that would probably have made most of the test cases fail rather than "some of the larger ones".
    Last edited by Douglas; 2017-08-04 at 08:56 PM.
    Like 4X (aka Civilization-like) gaming? Know programming? Interested in game development? Take a look.

    Avatar by Ceika.

    Archives:
    Spoiler
    Show
    Saberhagen's Twelve Swords, some homebrew artifacts for 3.5 (please comment)
    Isstinen Tonche for ECL 74 playtesting.
    Team Solars: Powergaming beyond your wildest imagining, without infinite loops or epic. Yes, the DM asked for it.
    Arcane Swordsage: Making it actually work (homebrew)

  19. - Top - End - #19
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by Douglas View Post
    Looking at that code, the first thing that comes to mind is that you've fallen into what I view as a common "trap" of overuse of generic already-defined data structures and an aversion to defining your own.
    Thank you. I may not want to apply that immediately, but I will take it on board and consider it.

    Next, on your calculation code: It is not necessary to actually get the list of cities in each component in order to answer the problem. All you really need to know is how many components there are, and to calculate that all you need is whether a city is in any component that you've already counted. This can be used to significantly simplify your algorithm.
    I don't need it but I put it in for aid in debugging the algorithm; If the algorithm fails on a test case, I want an output of the calculated components so I can compare the program's output with my own hand calculations. The more insight I have into exactly what the algorithm is doing at each stage of the process, the happier I am.

    Your solution is elegant and simpler than mine; I confess I like it and will study it.


    Respectfully,

    Brian P.
    Last edited by pendell; 2017-08-05 at 11:58 AM.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  20. - Top - End - #20
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Well, here's one I personally found mortifying.

    Game of Stones, part 1

    Problem description in spoiler

    Spoiler: Problem
    Show

    Two players (numbered 1 and 2) are playing a game with stones. Player always plays first, and the two players move in alternating turns. The game's rules are as follows:

    In a single move, a player can remove either 2, 3, or 5stones from the game board.
    If a player is unable to make a move, that player loses the game.

    Given the number of stones, find and print the name of the winner (i.e., First or Second) on a new line. Each player plays optimally, meaning they will not make a move that causes them to lose the game if some better, winning move exists.

    Input Format

    The first line contains an integer, n, denoting the number of test cases.
    Each of the subsequent lines contains a single integer, s, denoting the number of stones in a test case.

    Constraints
    1<=n<=100
    1<=S<=100

    Output Format

    On a new line for each test case, print "First" if the first player is the winner; otherwise, print "Second".

    Sample Input

    8
    1
    2
    3
    4
    5
    6
    7
    10

    Sample Output

    Second
    First
    First
    First
    First
    First
    Second
    First


    Now, when I saw this game theory problem, I was thinking about a tree to model the different moves, dynamic programming to save answers of previously calculated moves, alpha-beta pruning of the game search tree -- but it turns out you can solve this in one line of code.

    Spoiler: Solution
    Show

    if (numStones % 7 < 2 ) { Console.WriteLine("Second"); } else { Console.WriteLine("First"); }


    Okay, obviously you need a little more furniture to pull in the input from stdin, but that's essentially all you need to answer the question. Anyone want to take a crack at why it works? Hint: It's a proof by induction.

    There are times when I think I'm never going to have a mathematical head for this -- and I've been doing it for twenty years!

    Respectfully,

    Brian P.
    Last edited by pendell; 2017-08-16 at 08:43 AM.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  21. - Top - End - #21
    Surgebinder in the Playground Moderator
     
    Douglas's Avatar

    Join Date
    Aug 2005
    Location
    Mountain View, CA
    Gender
    Male

    Default Re: Job hunting and programming tests

    With the input range limited to integers no larger than 100, it would also be easy to solve it with a precomputed lookup table. That's really not a good programming challenge.
    Like 4X (aka Civilization-like) gaming? Know programming? Interested in game development? Take a look.

    Avatar by Ceika.

    Archives:
    Spoiler
    Show
    Saberhagen's Twelve Swords, some homebrew artifacts for 3.5 (please comment)
    Isstinen Tonche for ECL 74 playtesting.
    Team Solars: Powergaming beyond your wildest imagining, without infinite loops or epic. Yes, the DM asked for it.
    Arcane Swordsage: Making it actually work (homebrew)

  22. - Top - End - #22
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    It's a beginner problem. The problem author notes in the editorial that the point of the exercise is to teach basic game theory skills which can be applied to more complex problems. For example, why go through the trouble of computing the solution when a precomputed lookup table will do the job? If you check out some of the submissions in the discussion forum, it is very very easy to over-complicate this; at least, if you're new to game theory.

    Respectfully,

    Brian P.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  23. - Top - End - #23
    Titan in the Playground
     
    tyckspoon's Avatar

    Join Date
    Nov 2007
    Location
    Indianapolis
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by pendell View Post
    It's a beginner problem. The problem author notes in the editorial that the point of the exercise is to teach basic game theory skills which can be applied to more complex problems. For example, why go through the trouble of computing the solution when a precomputed lookup table will do the job? If you check out some of the submissions in the discussion forum, it is very very easy to over-complicate this; at least, if you're new to game theory.

    Respectfully,

    Brian P.
    I recognized the problem/game pretty quickly as a solved game with a known solution (it's a pretty common RPG 'puzzle' encounter, much like the Towers of Hanoi puzzle) although I don't have the background/knowledge necessary to quickly determine what the solved number is for a particular setup of it like the one presented here; if you know the solution to the game, it's pretty simple. There is some multiple of 'stones' where the next player to act on it can force it into a situation where he is guaranteed to win. If the setup starts on one of those multiples, the first player wins. If not, whatever the first player does will make it that way, and then the second player wins. I suppose the next level of difficulty for this question would be to write the general case solution: Given a set of possible moves, what numbers allow the first player to win? Which would reflect an understanding of *why* the answer for the most concise code is what it is.
    Last edited by tyckspoon; 2017-08-16 at 03:24 PM.

  24. - Top - End - #24
    Ettin in the Playground
     
    OldWizardGuy

    Join Date
    Aug 2010

    Default Re: Job hunting and programming tests

    This could be even worse than whiteboard interviews.

    A good whiteboard interview is more about principles and seeing how someone thinks than the code. This is just the code, and loses the interaction of working with the person, seeing how they respond to feedback, etc.

    Worse yet, most of the coding competition stuff I've seen is really about either extreme optimization or techniques commonly used for coding competitions. These skills are either mostly irrelevant or actually harmful in real-world engineering.

  25. - Top - End - #25
    Ettin in the Playground
     
    Erloas's Avatar

    Join Date
    Oct 2006
    Gender
    Male

    Default Re: Job hunting and programming tests

    So this is maybe not the best place, but probably not worth its own thread either (and it very well could have been asked before but the thread necro times are pretty short). anyway...

    So one of my undergrad degrees was in computer engineering, and we used JAVA, C++, assembly, and some RISC (specifically PIC microcontrollers). My other degree was more electronics, but either way the jobs I found took me down another path and not really doing anything I find that interesting. So I've just started my master's degree in Software Engineering. The main issue is that its been 14 years since I graduated and most of the programming I do anymore is a bit of fixing VBA, troubleshooting some ladder-logic (PLCs), and doing some algorithimy stuff in EXCEL. So I'm out of practice. And looking at some of these examples just drove that home.

    I'm sure the classes will force some re-learning but I don't want to start well behind either. So the short version is what are some good resources, books, websites, etc. to get back into practice knowing that the basics have already been covered. And more specifically which languages (and corresponding IDEs and APIs) I should be looking at. And I guess should I be looking more at language syntax and functions, or more general data structures and algorithms. I also probably should look at some scripting languages, which I haven't actually used before. And I guess "what is actually being used in industry at this point"

    And I suppose while I'm at it, if anyone has any leads to probably entry level programming jobs. What I would love to do most is embedded systems programming, but I don't know if starting there is at all possible.

    Would just going through a site like hackerrank and figuring everything out be a reasonable place to start?

  26. - Top - End - #26
    Colossus in the Playground
     
    BlackDragon

    Join Date
    Feb 2007
    Location
    Manchester, UK
    Gender
    Male

    Default Re: Job hunting and programming tests

    Well, the answer to the question to "what languages do I need to concentrate on?" surely depends on the course you're doing, so you should be asking that question of your professor (or whoever is leading the course). Since most of the other stuff you ask is dependent on that answer, I would find that out if I were you.

  27. - Top - End - #27
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by Erloas View Post
    So this is maybe not the best place, but probably not worth its own thread either (and it very well could have been asked before but the thread necro times are pretty short). anyway...

    So one of my undergrad degrees was in computer engineering, and we used JAVA, C++, assembly, and some RISC (specifically PIC microcontrollers). My other degree was more electronics, but either way the jobs I found took me down another path and not really doing anything I find that interesting. So I've just started my master's degree in Software Engineering. The main issue is that its been 14 years since I graduated and most of the programming I do anymore is a bit of fixing VBA, troubleshooting some ladder-logic (PLCs), and doing some algorithimy stuff in EXCEL. So I'm out of practice. And looking at some of these examples just drove that home.

    I'm sure the classes will force some re-learning but I don't want to start well behind either. So the short version is what are some good resources, books, websites, etc. to get back into practice knowing that the basics have already been covered. And more specifically which languages (and corresponding IDEs and APIs) I should be looking at. And I guess should I be looking more at language syntax and functions, or more general data structures and algorithms. I also probably should look at some scripting languages, which I haven't actually used before. And I guess "what is actually being used in industry at this point"
    In terms of what language you want to learn, that is greatly dependent on 1) Where you live 2) What you want to do for a living.

    Here in Raleigh, there is at the moment great demand for JAVA developers -- but that's for web applications and front-end stuff, not embedded systems. Embedded systems are still mostly C++, to my knowledge. So if that's what you want to do, C++ is what you should focus on. I'd also get familiar with Linux, in your shoes.

    Only issue is that there's not as many embedded jobs as other kinds of jobs.

    If all you want is a general programming job, I'd look at :

    -- Javascript, which isn't really a language , but is in great demand on the front end. Not just any javascript, either, look for Ext.JS, which is a greatly expanded framework.
    -- Java and C#. Not just any Java, by the way. See if you can learn the Java Spring framework, which is more and more common.
    -- Ruby on Rails is a strong competitor as well, I've had a number of people begging for Ruby work.
    -- Python is in the tail end, but people still ask for it.

    Here's a second opinion .

    Also, while we're talking about programming here, here's a dirty secret: [/i]programming isn't the biggest part of the job[/i]. The bigger part of the job is being able to design unit tests, being able to work together with other developers in an agile environment, being able to understand requirements -- these are all important.

    So if I were you I'd start googling the phrase "test-driven development", "agile processes", "design patterns", "anti-patterns", "coding best practices [for your language" . Learn what these are and how to do them (or, in the case of anti-patterns, avoid them). It takes more than coding to be a software engineer. Coding will get you past a programming test screen, but it isn't enough by itself to make it through the interview.

    Me, I go to web sites like Monster or Career Builder or ZipRecruiter and scan for the kinds of technologies and skills companies want, then either work on those skills (if I don't have them) or highlight them on my resume (if I do).


    Breaking into software in the first place is the hardest part ; one way to solve this is to get on your resume in any way possible. Home projects, co-op work, volunteer projects (does your church have a web site or have a database? What about your local library or school?). Once you've got the smallest smidgeon of real-world software experience on your resume, it becomes much easier to land any software job.

    If you're doing self-study, you can learn the languages and find useful tutorials for them simply by googling. Youtube also has some excellent college lectures online, for free . Here's another good one . Hackerrranked is a good place to work practice problems in a variety of languages, and get help to do so. I'm personally grateful because it's exercising my mental algorithmic muscles. So it's a part of the process, but it's only a part of the answer, not the whole answer itself.

    And I suppose while I'm at it, if anyone has any leads to probably entry level programming jobs.
    I've landed my last two jobs through careerbuilder -- simply by having a resume posted, and get calls and emails nonstop from recruiters. Of course, I am experienced so I am in demand, but I've found it's a lot easier than the old school way of sending out unsolicited resumes and cover letters.

    My current company, Honeywell, primarily recruits entry level from college, starting them off as co-ops before bringing them on full-time. If you've got the time and money, the single best way to start -- I believe -- is to get a four-year CS degree at a well known CS school and use their job pipeline.

    I've heard of coding boot camps, but I've never worked with a graduate of one. Here's a video by someone who runs a free boot camp , and there are paid ones which cost tens of thousands of dollars. I suspect you're probably better off self-starting ... but if you can find one that has a reliable job pipeline to employers, that also might be a way to get a foot in the door. I don't think a 'boot camp' can compare to a real CS degree, which gives you a much broader view of computing and engineering in general, but it might be better than nothing.

    Someone else want to chime in on that?

    At any rate, I would say hackerranked is a good site to practice CS problems on, and I use it for that. But real-world coding doesn't always have much to do with academic coding.

    ETA: It turns out hackerrank has a job board . Who knew?

    Good luck! Breaking into the software field is quite difficult, but I think it's well worth it.

    Respectfully,

    Brian P.
    Last edited by pendell; 2017-08-17 at 08:35 AM.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  28. - Top - End - #28
    Ettin in the Playground
     
    Erloas's Avatar

    Join Date
    Oct 2006
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by factotum View Post
    Well, the answer to the question to "what languages do I need to concentrate on?" surely depends on the course you're doing, so you should be asking that question of your professor (or whoever is leading the course). Since most of the other stuff you ask is dependent on that answer, I would find that out if I were you.
    Most of the classes don't specify what languages they'll be using, at least not in the basic course descriptions I get to see at this point. The first class is Software Verification, Validation and Testing which I think will be general rather than a specific language, at least at this point there is no language listed in the syllabus. And being a graduate degree I have a pretty wide range of classes that I can choose from, so its as much: do I want to take a class focusing more on C#, or C++, or Java based on which one will be in more demand out of school. Or of course taking more classes covering concepts rather than specific implementation, such as distributive computing and advanced algorithms.

    @Pendell
    Right now I live in the middle of no-where, there probably aren't any programming jobs anywhere near (maybe some industrial PLC type stuff). But in the end I'm wanting to go somewhere else. Ideally the Pacific Northwest, but the Salt Lake City area is the closest tech hub to me now and I would be willing to look at a lot of places for the right job.

    I'm also actively looking for a new job now, and since I just started grad school I've got at least a year and a half, so I think that finding any job to get experience would be valuable even if it isn't what I ultimately want to do. So maybe "whats the most in-demand areas right now for more entry level positions."

    I've started using Linux some, going to do most of my programming there just to get familiar with it.

    I've worked on several non-software projects, so I've got a pretty good understanding of defining requirements and working with others. Probably a lot more than anyone just out of college. So that's why I'm trying to focus more on the programming side of things, because that is what I'm out of practice in.

    I could probably pull out a few CIS related things that I do right now, I just wasn't sure how much some of them would matter, as they all seem so basic to me. Things like making and modifying reports in Access and writing queries. And of course troubleshooting the 20yr old VBA code that is running in our database. I could also find a few projects at my current job that I could switch to a dedicated program rather than pushing it through Access and Excel, although that becomes a bit trickier since I don't think I can convince IT that I have to have a software IDE installed on my computer, so I might have to just remote desktop my home PC from work to do that stuff on. I know my boss wouldn't understand the value of it. I've also done a prototype embedded system for my old company using a PIC chip. But I can't honestly say I've done any real world development in Java or C++.

    My undergrads were Computer Engineering Technology and Electronics Engineering Technology, different focus but closely related. The CET... well I just copied what the website says about it now (specifics have changed but the general idea wouldn't have, IOT wasn't really a thing then)
    Focus on the skills needed to research, design, develop and test computer hardware and learn the software needed for product development. Also learn to test, monitor and maintain a variety of advanced electronic products and industrial equipment, including chips, semiconductor fabrications and electronic Internet applications.

    So it is quite a bit different than the standard Computer Information System degrees, I did take 1-2 CIS classes as electives when I had a spot to fill, but for the most part we didn't have any common classes. There was a lot more focus on lower level coding, rather than "business" coding that CIS does.

    I'm doing ASU Online's Engineering Science (Software Engineering) which I think is a good choice. It is listed as one of the top online engineering University programs, at least in EE, not sure about the rest of them. But of course EE is a much bigger area so it gets a lot more attention.

  29. - Top - End - #29
    Titan in the Playground
     
    Planetar

    Join Date
    Dec 2006
    Location
    Raleigh NC
    Gender
    Male

    Default Re: Job hunting and programming tests

    Quote Originally Posted by Erloas View Post
    Most of the classes don't specify what languages they'll be using, at least not in the basic course descriptions I get to see at this point. The first class is Software Verification, Validation and Testing which I think will be general rather than a specific language, at least at this point there is no language listed in the syllabus. And being a graduate degree I have a pretty wide range of classes that I can choose from, so its as much: do I want to take a class focusing more on C#, or C++, or Java based on which one will be in more demand out of school. Or of course taking more classes covering concepts rather than specific implementation, such as distributive computing and advanced algorithms.
    Most computer courses that I've been in expect you to pick up languages on your own. The important thing about a class you take isn't so much the language itself but the lessons it teaches in the language ; how to access a database, how to build a data structure, how to do object-oriented design and programming. Once you understand the general concept in one language, you're expected to be able to apply it yourself in others. For instance, if you pick up the Factory design pattern and learn it in Java, you're expected to be able to apply it in Python, Ruby, or C# on your own.


    @Pendell
    Right now I live in the middle of no-where, there probably aren't any programming jobs anywhere near (maybe some industrial PLC type stuff). But in the end I'm wanting to go somewhere else. Ideally the Pacific Northwest, but the Salt Lake City area is the closest tech hub to me now and I would be willing to look at a lot of places for the right job.

    I'm also actively looking for a new job now, and since I just started grad school I've got at least a year and a half, so I think that finding any job to get experience would be valuable even if it isn't what I ultimately want to do. So maybe "whats the most in-demand areas right now for more entry level positions."

    I've started using Linux some, going to do most of my programming there just to get familiar with it.

    I've worked on several non-software projects, so I've got a pretty good understanding of defining requirements and working with others. Probably a lot more than anyone just out of college. So that's why I'm trying to focus more on the programming side of things, because that is what I'm out of practice in.

    I could probably pull out a few CIS related things that I do right now, I just wasn't sure how much some of them would matter, as they all seem so basic to me. Things like making and modifying reports in Access and writing queries. And of course troubleshooting the 20yr old VBA code that is running in our database. I could also find a few projects at my current job that I could switch to a dedicated program rather than pushing it through Access and Excel, although that becomes a bit trickier since I don't think I can convince IT that I have to have a software IDE installed on my computer, so I might have to just remote desktop my home PC from work to do that stuff on. I know my boss wouldn't understand the value of it. I've also done a prototype embedded system for my old company using a PIC chip. But I can't honestly say I've done any real world development in Java or C++.

    My undergrads were Computer Engineering Technology and Electronics Engineering Technology, different focus but closely related. The CET... well I just copied what the website says about it now (specifics have changed but the general idea wouldn't have, IOT wasn't really a thing then)
    Focus on the skills needed to research, design, develop and test computer hardware and learn the software needed for product development. Also learn to test, monitor and maintain a variety of advanced electronic products and industrial equipment, including chips, semiconductor fabrications and electronic Internet applications.

    So it is quite a bit different than the standard Computer Information System degrees, I did take 1-2 CIS classes as electives when I had a spot to fill, but for the most part we didn't have any common classes. There was a lot more focus on lower level coding, rather than "business" coding that CIS does.

    I'm doing ASU Online's Engineering Science (Software Engineering) which I think is a good choice. It is listed as one of the top online engineering University programs, at least in EE, not sure about the rest of them. But of course EE is a much bigger area so it gets a lot more attention.
    You might be surprised. Time Magazine reports that there are a number of up-and-coming cities, including Salt Lake City (#9 on the list).

    I'm getting constant calls from recruiters in places like Omaha, New York, Minneapolis and so forth. It's because I have my resume posted on a job site board and it is reasonably attractive.

    So here's my thoughts on getting into the field:
    1) Referrals are still the best way to get to the hiring manager. So if you have any friends or relatives or acquaintances in the computer field, now's a good time to ask.

    Heck, talk to me in PM and we'll set up an email conversation so you can send me your resume. I don't think my new employer or my old one is hiring entry-level right now, but I'll keep my eyes open.

    2) You're at a university? Great! Get down to their co-op program and see if you can get a summer assignment as a software engineer. That'll get you in the door at a company at best, at worst it's experience for the resume.

    3) Careerbuilder, monster, ziprecruiter, craigslist. Review the job postings and apply through the site (zip recruiter has 1-click apply -- and yes, I got interviews through them). Post your own resume to those sites and allow recruiters to call you. My last three jobs all came through careerbuilder because the hiring manager or recruiter called *me*. I didn't get many bites to applications I sent out, especially to big-name companies, which tend to be slower. But when they came to me, I had much better success.

    Seriously, get in on that website and start doing searches for "entry-level software engineer" and suchlike keywords. Do it on a couple of them. See if any attract your interest, and if so make note of where they are and what skills they require.

    4) Your resume is what gets you in the door. A tech resume is a bit different than a standard job resume because they are often scanned by software looking for keywords, and the keywords they are looking for are tech skills like "cloud based" , "full stack", "java", and so forth. So make sure the tech skills are front row center in the resume, even above the experience.

    5) When you get an interview, google up interview questions in the technical areas you're interviewing for. This won't replace having a solid background , but even I occasionally get tripped up by the occasional crazy question/answer -- which often comes from one of those self-same lists, which the interviewer googled before the interview. Also google the company, try to understand who they are and why they're hiring, be prepared to talk to this during the interview. Every bit of intelligence you can gather helps.


    I won't lie; getting into entry-level CS is really, really hard. But once in, it's a lot easier to stay in, especially if you keep your skills up and make a point of self-studying the hot technologies even if they're not part of your daily responsibilities.

    Respectfully,

    Brian P.
    Last edited by pendell; 2017-08-17 at 12:01 PM.
    "Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."

    -Valery Legasov in Chernobyl

  30. - Top - End - #30
    Surgebinder in the Playground Moderator
     
    Douglas's Avatar

    Join Date
    Aug 2005
    Location
    Mountain View, CA
    Gender
    Male

    Default Re: Job hunting and programming tests

    For embedded systems specifically, C++ is the common language of choice. For the software engineering industry in general, Java is I think the top language, with C# a strong competitor for companies that use .NET and other Microsoft technologies.

    For IDEs, C# is usually done with Visual Studio (because Microsoft), but out of the box it has a lot of shortcomings compared to other major IDEs. Look into ReSharper as a Visual Studio plugin if you go for C#. Java has two really major popular IDEs - Eclipse, and IntelliJ. In my opinion IntelliJ is the better one by far.

    The primary point in favor of Eclipse that I've heard is it has a really good plugin system and a whole ton of plugins that use it, so there are a lot of extra things you can expand its capabilities into with those plugins. IntelliJ, on the other hand, puts its focus on the core "writing some code" experience, and has achieved an extremely good ease of use suite of features.

    When getting into Java professionally I started with IntelliJ in my personal use and then my first Java job insisted on Eclipse. Using Eclipse, I found myself constantly frustrated by seemingly minor things that help write code just not working as well. Things like autosuggest (you start typing a method call, the IDE pops up a list of possible completions, you can pick one or ignore it), or shortcuts for navigating around the code base to look things up. In IntelliJ, it's very common for me to start typing, see that the first item on the autosuggest list is what I want, hit enter to pick it and skip typing the remaining dozen characters, and continue. In Eclipse, by default it doesn't show suggestions unless you explicitly call for it, I had to use a hackish workaround of making "." the shortcut to get it to pop up automatically in many of the situations I'd want it for (but far from all), and it's slow and much more often has the choice I want several spots down the list requiring extra keystrokes to pick it. It's hard to point at any specific other feature, and any single thing I might find would probably seem trivial at first, but they each have their tiny impact show up all the time and it really adds up. Writing code is just plain easier and faster in IntelliJ than Eclipse, and I will never use Eclipse again if I'm not required to.

    IntelliJ also has support for C#, I believe, though it might require a plugin, and I'd seriously consider using it instead of Visual Studio for C#.

    On to other subjects, if a job involves VBA, Excel, or Access, those are usually huge red flags that the company doesn't have a strong software focus and that any programming job they have will be poorly managed and supported because it's far outside their core area of competence. There are exceptions of course, but it's something to be wary of.

    And I really should stop typing and go to work now.
    Like 4X (aka Civilization-like) gaming? Know programming? Interested in game development? Take a look.

    Avatar by Ceika.

    Archives:
    Spoiler
    Show
    Saberhagen's Twelve Swords, some homebrew artifacts for 3.5 (please comment)
    Isstinen Tonche for ECL 74 playtesting.
    Team Solars: Powergaming beyond your wildest imagining, without infinite loops or epic. Yes, the DM asked for it.
    Arcane Swordsage: Making it actually work (homebrew)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •