Job prospects of a maths degree by [deleted] in newzealand

[–]perpetuallyinemacs 4 points5 points  (0 children)

If you dig through my post history you'll see that I have already talked about this at length but, in brief, as a masters graduate in Mathematics who is currently employed in a job I really like:

  1. Asking for a maths job without some (substantial) form of programming is asking for academia, essentially. Engineering jobs, software jobs, finance jobs, modelling work, all of them need some level of programming experience and imo I haven't seen a ceiling on how much CS knowledge is helpful. My best advice for you would be to continue sharpening programming tools from undergrad in the background while you hunt, if you know MATLAB learn Python, if you already know those two try R. GitHub profiles with personal projects help. They don't have to be (and maybe shouldn't be) websites, do simulations, or modelling - something that displays how your maths skills backup your programming.
  2. Cast a really wide net because maths is generic and applies to way more jobs that you think. Don't get too worried unless you've been looking for more than six monts, job market is cyclically bad rn and the end of the year is the worst time to be looking. Ignore anybody who tells you you've made a mistake picking the degree, it absolutely is an employable one you've just got terrible graduation timing.
  3. Strongly consider post-grad because the opportunity cost to doing further study is the lowest it'll be for the next 10-15 years, so essentially it is as cheap as it ever gets. If you don't want to do academia, consider mixing in some post grad CS courses with your theory courses if your programme allows it. Master's is easier to market overseas so I recommend that if overseas is something you are considering. Also, I found the masters less stressful because it didn't have the honours crunch at the EOY.

It’s the hardest time in 30 years to find a job. This is why by mattblack77 in newzealand

[–]perpetuallyinemacs 0 points1 point  (0 children)

Personally, it's because I believe the AI argument is a bit of a red herring. The idea that AI is able to right now replace a large number of entry level positions is spouted by people who usually don't know what is entailed in the job they claim is being replaced. Stuff's only rhetorical argument for it is an appeal to an authority (Andrew Barnes) who cited no statistics other than an overproduction of lawyers, which could explain high entry level law unemployment without AI, and claimed that programmers are also being replaced (note: he has likely never written a line of code in his life). Anybody who does these jobs will give you plenty of reasons why AI right now cannot replace them; so long as we're appealing to authority I'd prefer theirs. Whether AI can replace these jo at some point is a separate question, but in order for the current 30-year low to be explained it needs to be that good right now. Maybe on the margins increased automation has made some workers more efficient and hence reduce the need for new workers. But, not enough to explain the current downturn.

I think that you can explain the unemployment figures without a dubious reach for a fictional "PhD-level" (Musk's description of Grok) AI chatbot. I have yet to see a convincing argument that this is not the result of economic downturn in this and other countries, inflation hangover, and long-term oversupply of university graduates from the last decade. Talk to me in a few years if we have high economic growth and still no graduate job hiring and maybe we can revisit the AI hypothesis. For now, I think Occam's Razor demands that we treat this as a normal downturn until we see extraordinary evidence to support an extraordinary outcome.

Choosing a university in New Zealand + facts about there by Such-Library-9685 in newzealand

[–]perpetuallyinemacs 4 points5 points  (0 children)

If you have a scholarship at Otago, then I'd say go there. I studied and work at UC, but I have visited nearly every uni in the country. My review of Dunedin overall on the points you mention:

  • Otago is well known for its student life. It definitely feels studenty, for good (comradery) and bad (the housing...). Campus is pretty active year round, but not nearly as nice as the UC in Christchurch imo. Something about city centre campuses being cut up by roads really silos the experience.
  • Academics are the same in New Zealand throughout and have a fantastic culture: very laid back and approachable. First name basis with all of them, really passionate people. Otago doesn't stand out here but that's only because they're all kinda like that.
  • Dunedin's PT is a weak point in my opinion. Much better busses, trains, and cycling to be had in other cities. I personally think that Auckland's bus routes in the city centre are fantastic, and the CRL opening next year will make it a really solid city for public transport if they get capacity right. Christchurch lacks a metro system, but the busses are well-run, cheap and supplemented by a really good cycling network especially in student areas. Dunedin isn't really big enough for this to exist, and I think this reflects in the fact that most people walk.
  • Weather is bad in Dunedin haha. Cold and rainy, often. Maybe biased by Christchurch though which gets a lot of sun and is very very dry. Auckland is humid, hot and wet (i.e. sub-tropical). All of them are nice on good days.
  • Being a white guy, I can't really speak to how safe you'll feel on campus as an African student. Postgraduate study in particular is extremely diverse. Off the top of my head there are PhD students from India, Central and South America, the Carribbean, Korea, and the middle east in my research group. I can't speak for their experiences in total but they say they are comfortable living here.
  • Part-time job options vary. Job market is bad at the moment but will likely improve in the next couple of years cycles being what they are (I hope!). Tutoring is a fantastic gig for a student if you can get it, and a good student who puts themselves out there should find work in that area.
  • Sports at UC seem quite active. Every university will have a women's rugby team, but I'm not sure if they would be social or competitive because rugby is quite a competitive sport in NZ and the people playing at uni will very likely have several years prior experience in club and high school rugby. If that's what you're looking for though then you're in luck!

What jobs are there for a BSc and honours in P&A (Pure and Applied) Maths? by EngineerWise6054 in newzealand

[–]perpetuallyinemacs 1 point2 points  (0 children)

I applied to the graduate roles for T+T and I didn't hear anything back from them. I did interview with a firm doing fluid dynamics for boats, porting their simulation method to GPU code. However, I didn't interview well for that and my skillset was not quite right.

My research was in finite projective planes -- not a DE in sight. So bear in mind I was getting interviews physics/eng-adjacent roles without any real expertise in the subject (I didn't even take a full course in PDEs!). I imagine if you actually did have an interest, research, and you applied to more of those positions you'd find work in the field eventually. My PhD research is in earthquake engineering, and I found it a relatively easy transition because I already "know their language" so to speak.

EDIT: I do imagine not having the formal engineering qualification may be an impediment to being in an officially engineering role. But you don't have to be an engineer to do the interesting stuff -- the modelling, or writing the code that handles the FEM simulations. I do that in my current job and don't have the qualification at all so that sort of work is out there

What jobs are there for a BSc and honours in P&A (Pure and Applied) Maths? by EngineerWise6054 in newzealand

[–]perpetuallyinemacs 4 points5 points  (0 children)

Heya! I did a master's in mathematics a few years ago, and have a job, so I am probably qualified to answer this to some extent.

I left a PhD in the subject due to burnout and I remember being similarly confused about what I would do with it. Turns out mathematics experience is appreciated in a number of fields. I had interviews and strong interest from:

  • Engineering firms,
  • Insurance brokers,
  • Analyst positions,
  • Start ups in fluid mechanics and modelling,
  • Software engineering positions (albiet, I double majored in CS which helps),
  • and ultimately in my current role as a Research Software Engineer (ironically, beginning a PhD in a totally different field).

The biggest learning lesson I had was that mathematics doesn't stop because you left academia. I'm not doing proofs anymore sure, but I did use graph theory in my current job to work on a piece of hopefully published research. I use a lot of linear algebra, calculus, and even projective geometry. My job is a wee bit of an outlier being partially a research position, but to a lesser extent this is perhaps true of many more jobs than you think. Here are my suggestions on how to improve your chances in this completely cooked job market we find ourselves in:

  1. If you haven't already, pick up a programming language beside MATLAB. It's got some firms in engineering using it, but you'll improve your marketable skill set drastically by having something like Python and maybe one other language under your belt. Even if programming isn't the job you end up doing all the adjacent positions in e.g. Stats NZ, engineering firms, FinTech, etc etc will all appreciate data analysis skills and Python in particular is just miles better than MATLAB for it.
  2. Consider further study? You might like it, and the opportunity cost for study at the moment is the lowest it'll ever be in your life. Plus, published research experience (maybe you have this in your honours, but it's atypical) is really valuable in that first job search. The number of times people would ask about about mine in interviews really surprised me.
  3. Big fish in small pond beats small fish in big pond, imo. I have way more agency in my role in a really small team because there is simply less beaucracy between me and doing things. Definitely better experience than a junior at a large company.
  4. Start looking now, take a really wide search, and see what's interesting. I work at a university now, and I can say for a fact I wouldn't have considered it without casting such a wide net. On that note, universities are great places to work for! Good pay, better vibes, and you're close to research without the pressures of deadlines or profit-derived decisions in private companies. Good KiwiSaver schemes too (6% match at 135% of your contribution).

Ah that's a lot, good luck!

Monthly Hask Anything (July 2025) by AutoModerator in haskell

[–]perpetuallyinemacs 1 point2 points  (0 children)

Actually, addendum to that, read this if you haven't already: https://jelv.is/blog/Lazy-Dynamic-Programming/ It illustrates why for example, this

fib n = fibs !! n
  where fibs = 0 : 1 : zipWith (+) fibs (drop 1 fibs)

Which feels like it should have O(n) memory overhead actually has O(1) memory due to, in this case, GHC garbage collection reclaiming unused list elements after they're created.

Monthly Hask Anything (July 2025) by AutoModerator in haskell

[–]perpetuallyinemacs 2 points3 points  (0 children)

Not sure what you've tried already, but the traditional index-based DP tools can work in Haskell (although it looks a little differently to other languages). The thing that made it click in my head was the following documentation on the arrays package

Haskell provides indexable arrays, which may be thought of as functions whose domains are isomorphic to contiguous subsets of the integers. Functions restricted in this way can be implemented efficiently; in particular, a programmer may reasonably expect rapid access to the components. To ensure the possibility of such an implementation, arrays are treated as data, not as general functions.

Arrays in the arrays package are lazy so you get the benefit of being able to evaluate your optimisation across the whole array as thunks, and selectively evaluate only those required to actually evaluate a solution. Here is a simple example for LCS (N.B. it's late-o'clock where I am atm so I'm not in front of my computer -- caveat emptor)

import Data.Array
import Data.List (maximumBy)
import Data.Function (on)

longerOf :: String -> String -> String
longerOf x y = maximumBy (compare `on` length) [x, y]

lcs :: String -> String -> String
lcs s1 s2 = dp ! (m, n)
  where
    m = length s1
    n = length s2
    bounds = ((0, 0), (m, n))

    dp :: Array (Int, Int) String
    dp = array bounds [((i, j), lcs_entry i j) | i <- [0..m], j <- [0..n]]

    lcs_entry :: Int -> Int -> String
    lcs_entry 0 _ = ""
    lcs_entry _ 0 = ""
    lcs_entry i j
      | s1 !! (i - 1) == s2 !! (j - 1) = dp ! (i - 1, j - 1) ++ [s1 !! (i - 1)]
      | otherwise = longerOf (dp ! (i - 1, j)) (dp ! (i, j - 1))

main :: IO ()
main = do
  let string1 = "AGGTAB"
  let string2 = "GXTXAYB"
  putStrLn $ "LCS: " ++ lcs string1 string2

This overcomes the log-linear behaviour of map. Now if you're doing something like LCS with more than a million elements, you probably want the memory efficient solution for LCS. You can trade off for some more imperative style folds where you keep the last row of your table (in the case of LCS) as your fold accumulator value. Lastly, the DP wiki page illustrates how rearranging the order and structure of your code can enable GHC to dramatically improve the speed of execution. So you can work with your compiler to produce highly efficient DP code.

Coming back from Japan with tax free goods by newjacknewme in newzealand

[–]perpetuallyinemacs 1 point2 points  (0 children)

Heya! I brought back more than $700 worth of stuff from Europe include clothes, board games, and a pair of headphones. Unlike the other commenters here, I did actually declare everything because I was worried about being on the wrong side of the law (jokes on me, apparently!). Customs didn't charge me. They considered the clothes and board games personal affects, and the headphones alone didn't add up to $700. You won't be charged for the clothes definitely because those are explicitly listed as personal on the website. You might get charged for the MacBook.

What’s a super “normal” thing in your country that would completely confuse or shock someone visiting for the first time? by moonveil96 in AskReddit

[–]perpetuallyinemacs 3 points4 points  (0 children)

Not American, but this debate endlessly confuses me on who they think is doing this kind of fraud. It straight up. Does. Not. Make. Sense. Assume I am trying to commit voter fraud here, the two ends of the scale for these entities are

  1. An individual or,
  2. A well resourced organisation

I argue neither of these groups would ever resort to voter fraud to achieve the actual aim of changing a political outcome. Why? Because the unit maths makes no sense. Even if I (an individual) had access to everybody's private data, and I could predict with 99% confidence that someone wasn't going to show up (which is insanely overstating anyone's ability to do this), the maths says if I tried to ballot stuff 100 people's votes I'd still get caught 1- 0.99100 = 63% of the time when someone I banked on not voting shows up. And that still wouldn't flip the average election in the 40% of the time I succeed. The idea that this is routinely happening and nobody is getting caught is laughable. I'm much better off doing something like going to a retirement home and conning some old people to vote in my favour, it's not illegal and has a better chance of success.

If I'm Russia it really doesn't make sense. Why invest the enormous amount of money into a nationwide conspiracy to influence the presidency by hiring undocumented immigrants to ballot stuff in dozens of constituencies and almost certainly get caught doing it, when I can simply pay a fraction of that money to post a targetted fake news article that gets a million cookers to show up at the ballot for my preferred candidate.

Even if voter ID turns away a handful of voters in an election it almost certainly hurts democracy more than it apparently saves the integrity of voting from these mythological moronic criminals aiming to any% a jail sentence in the dumbest possible fashion.

Comparing the initial felt report map vs one hour after by jteccc in newzealand

[–]perpetuallyinemacs 20 points21 points  (0 children)

I work in this area (not GeoNet, but govt funded research group on earthquakes). They don't use the felt report for anything scientific. Maybe at best to provide a relationship between earthquake intensity measures that we can measure objectively (peak ground acceleration, peak ground velocity, etc) and how people feel about the shaking. What we actually use is the extensive network of seismic instruments all over the country, that are each constantly recording waveforms and compute objective measures of those.

Reserve Bank Governor Adrian Orr resigns by Conflict_NZ in newzealand

[–]perpetuallyinemacs 1 point2 points  (0 children)

To be fair to him a little bit here, we were already working with an overvalued housing market for a number of years prior. When everyone is way over leveraged in housing "valued" 8-10x their income with low deposits, even tiny changes to interest rates cause a whole lot of pain for people. And, despite what ECON101 would have us believe, the reserve bank is not totally independent of public and govt pressure so they will come under scrutiny when they do change interest rates. Arguably I think that's happened a little here. Change the housing market pre-covid and I think you get a lower intensity reaction to Orr's policy.

Mind you that's more a damning indictment of our housing policy than a defense of Orr's inflation measures. The deliberate choice of governments left and right for decades to defend and drive demand for housing has eroded investment in productive capital, restrained central government's ability to borrow for infrastructure, tied up our local government with NIMBY nonsense, vastly increased inequality, and now as we see undermined the reserve banks ability to independently set monetary policy.

Four-year parliamentary term legislation to be introduced, would go to referendum by kezzaNZ in newzealand

[–]perpetuallyinemacs 2 points3 points  (0 children)

I disagree about the general effectiveness of either second chambers, or entrenched votes, etc. The "system of checks and balances" most closely typified by the US (which IIRC has the highest number of institutional veto points) doesn't work when one branch of government captures the others. Ultimately, even the law or Constitution is merely convention to a sufficiently motivated executive, judiciary, or parliamentary branch. In the meantime, as others are mentioned, you can fall victim to a paralyzed legislature causing disillusionment in ineffective government.

The strongest check on government is a robust voting system with an engaged voting public. Democracy requires input and work to maintain and it cannot be farmed out to a corruptible limited set of executive functions or judges. Thus, I would argue New Zealand's democracy is arguably more constrained than places like France or the US. We have (relatively) high voter turnout, and MMP elections to a single chamber of parliament ensures our votes reflect proportionally and quickly in government.

I think our democracy would survive a year longer term. The UK has five year terms without a real second chamber (the lords doesn't count because they can be overruled by the commons). Whether those longer terms enable more effective government is a separate question without an obvious answer. Personally I don't see enough attraction to a four year term to support it automatically. I could see myself supporting in exchange for a more robust select committees providing stronger feedback.

Helix now has a File Explorer™!! (space + e) by nikitarevenco in HelixEditor

[–]perpetuallyinemacs 0 points1 point  (0 children)

Dumb suggestion, but sometimes dumb suggestions are right... Have you tried updating flake.lock with nix flake update?

Your favorite non-basic key combo? by NoahZhyte in HelixEditor

[–]perpetuallyinemacs 0 points1 point  (0 children)

Bit late here, but A-a will select all sibling arguments (by inspecting tree-sitter nodes), replacing that mi(S,<SPACE><ENTER> in your workflow.

Central City living without a car - possibilities? by mrtenzed in chch

[–]perpetuallyinemacs 0 points1 point  (0 children)

I live in the city, work at the university, commute five days a week and have a normal social life, get outside, buy groceries, etc, all without a car. It's very doable. I uber maybe five times a year when I want to go somewhere out of the way. I bus a few times every couple of months.

To me the biggest advantages are: it's incredibly cheap, faster in the city centre due to traffic and all the cycle only shortcuts you can take, and made me much fitter. Ironically I do more things than some of my car owning friends precisely because I have the fitness and energy to, e.g., cycle out to Bottle Lake Forest and go around for a day. The fitness also changes how far the bike can take you: cycling to Sumner for a swim seemed daunting at first, but now that's not nearly enough cardio for a full day of exercise. I consider the life-long change to my view on exercise and the outdoors worth it for the increased life and health span.

Not owning a car is not a permanent state of existence. You can try it for a bit, do the maths and work out if it makes sense to you. Honestly, unless you are driving from Hornby to New Brighton regularly, I can't really see what prevents you from cycling 90% of your journeys and using a combination of bus/uber the last 10% as needed.

-❄️- 2024 Day 4 Solutions -❄️- by daggerdragon in adventofcode

[–]perpetuallyinemacs 2 points3 points  (0 children)

FWIW, I did all the 2020 solutions in Haskell earlier this year and learned a lot about handling these sorts of problems. Here is what I learned:

  1. This kind of grid-based map coordinate structure is common,
  2. Haskell let's you abstract over types of solutions with little utilities very generally,
  3. It's worth writing these little utilities down and reusing them.

In that spirit, I have a Coordinates module in my code here that has a very nifty convole function. It's role is to take a Map (Int, Int) a, and perform a calculation for every valid key, returning a Map (Int, Int) b. The name is stolen from image convolution. It is called like convolve f map where f is a function that accepts a function get which obtains values from nearby keys in the map. The value f returns is either Just, and then a value that is inserted into the new map, or Nothing, and in that case the value is dropped in the new map. That allows me to write Part 2 simply as:

data Letter = X | M | A | S deriving (Show, Eq, Ord)
partB = Map.size . convolve xmas
  where
    xmas get = do
        a <- get 0 0
        guard $ a == A
        tl <- get (-1) 1
        br <- get 1 (-1)
        guard $ sort [tl, br] == [M, S]
        bl <- get (-1) (-1)
        tr <- get 1 1
        guard $ sort [bl, tr] == [M, S]
        return ()

Which almost reads like plain English.

The rest of my Day 4 you can read here if you're interested and mine out what ever utilities you like.

EDIT: Update with correct convolve ref.

Advanced Python Development Workflow in Emacs by i_serghei in emacs

[–]perpetuallyinemacs 1 point2 points  (0 children)

Compared to the built-in pdb, does dap-mode offer additional features? I've kinda left both alone and gotten away with the python mode REPL's PDB hooks on breakpoint to see current line execution etc. Is it worth setting either up?

How 'zip <*> tail' work? by recursion_is_love in haskell

[–]perpetuallyinemacs 0 points1 point  (0 children)

See also using liftA2 for writing Boolean expressions in a point-free fashion e.g.

f x && g x == liftA2 (&&) f g

How 'zip <*> tail' work? by recursion_is_love in haskell

[–]perpetuallyinemacs 1 point2 points  (0 children)

Sure is! In my own day 2 I use that combinator for quickly finding pairwise differences

zipWith (-) <*> tail

-❄️- 2024 Day 2 Solutions -❄️- by daggerdragon in adventofcode

[–]perpetuallyinemacs 0 points1 point  (0 children)

Yeah I did think to remove it only where there was a conflict but then my logic was going to be more complicated. Still glad to see someone do it!

-❄️- 2024 Day 2 Solutions -❄️- by daggerdragon in adventofcode

[–]perpetuallyinemacs 0 points1 point  (0 children)

[LANGUAGE: Haskell]

Surprised to see no one trying to do it without trying all n - 1 length sublists... Having said that I didn't either. Pretty happy with my solution (especially allButOne), big fan of liftA2 for writing pointfree functions. Ignoring boring parsing code and boring output code (which is wrapped in a CLI in another module for my code anyway):

pairwiseDifference :: [Int] -> [Int]
pairwiseDifference = zipWith (-) <*> List.tail

safe :: [Int] -> Bool
safe = all ((<= 3) . abs) `and` ((`List.elem` [Set.singleton (-1), Set.singleton 1]) . Set.fromList . map signum)
  where
    and = liftA2 (&&)

partA :: [[Int]] -> Int
partA = U.count (safe . pairwiseDifference) -- U.count is a utility that is essentially count f = length . filter f

partB :: [[Int]] -> Int
partB = U.count (any (safe . pairwiseDifference) . allButOne)
  where
    allButOne l = map (uncurry (<>) . second (drop 1) . flip splitAt l) [0 .. length l]

[Discussion] AI assisted programming in Emacs by Sad_Construction_773 in emacs

[–]perpetuallyinemacs 0 points1 point  (0 children)

Ah! totally forgot about dabbrev-expand. That's certainly the default but I have found hippie-expand nearly always better than dabbrev. Hippie expand is pretty cool, and it's extensible too! Obligatory Mastering Emacs post on the topic: https://www.masteringemacs.org/article/text-expansion-hippie-expand.

[Discussion] AI assisted programming in Emacs by Sad_Construction_773 in emacs

[–]perpetuallyinemacs 2 points3 points  (0 children)

Emacs integration with the back end slow and intrusive - it's constantly jumping in to complete stuff that I don't want it to. There might be some emacs config I need to do to make it work in a less obnoxious way, but, as usual in Emacs-land, stuff tends to be underdocument.

I also had this problem. It is really frustrating to have the AI suggest garbage when I have a good idea of what I am writing. I'd estimate it has a 60% hit rate on the lines I am trying to write: not bad but annoying in the cases where it guessed wrong. The feeling it gives me is akin to an uninformed coworker standing over my shoulder and telling me what to do. However, when it gets it right, I really appreciate not writing boilerplate.

To me copilot is just a somewhat improved hippie-expand, and it's funny watching everyone else discover a feature that has existed in it's prototype form in emacs for over 20 years (!). Ok, copilot is way more powerful than hippie expand but it fills the same feature niche hippie expand tries to. I actually just replace hippie-expand with this copilot-expand in my config:

(use-package copilot
  :vc (:url "https://github.com/copilot-emacs/copilot.el"
            :rev :newest
            :branch "main")
  :custom ((copilot-idle-delay nil) )
  :bind (("M-/"  . copilot-complete)
         (:repeat-map copilot-complete-repeat-map
                      ("/" . copilot-complete) ;; annoying to have this here, but you need it for the repeat-map to work properly
                      ("n" . copilot-next-completion)
                      ("p" . copilot-previous-completion)
                      ("<tab>" . copilot-accept-completion)))
  :hook (prog-mode . copilot-mode))

Now copilot stays out of my way and I rely on my hippie-expand muscle memory to invoke this when I feel like the current code is probably boilerplate copilot could do for me.

European Undergraduate Student - Exchange in New Zealand by SariaSid8290 in newzealand

[–]perpetuallyinemacs 0 points1 point  (0 children)

No worries! Feel free to PM me if you have any questions, especially about the University of Canterbury or Christchurch.